การทำ Observability: CloudWatch, X-Ray, Distributed Tracing

Sharing is caring!

บทนำ

ในยุคของ Cloud-native และ Microservices ระบบมีความซับซ้อนมากขึ้น บริการต่าง ๆ เชื่อมต่อกันหลายชั้น ทำให้การติดตามปัญหาหรือวัดประสิทธิภาพของระบบไม่ใช่เรื่องง่ายอีกต่อไป นี่คือเหตุผลที่เราต้องเข้าใจแนวคิดของ Observability และเครื่องมือหลักบน AWS เช่น CloudWatch และ X-Ray

Observability คืออะไร?

Observability หมายถึง “ความสามารถในการสังเกตและเข้าใจการทำงานภายในของระบบ” โดยการวิเคราะห์จากข้อมูลภายนอก เช่น Logs, Metrics และ Traces ซึ่งเป็น 3 เสาหลักสำคัญที่ใช้ร่วมกัน

  • 📊 Metrics – ตัวเลขบ่งบอกสถานะของระบบ เช่น CPU, Memory, Latency
  • 🧾 Logs – รายละเอียดเหตุการณ์ที่เกิดขึ้นในระบบ เช่น Error, Request
  • 🔍 Traces – เส้นทางการทำงานของคำขอ (Request Flow)

CloudWatch คืออะไร?

Amazon CloudWatch คือเครื่องมือหลักในการเก็บและวิเคราะห์ข้อมูล Metrics และ Logs ของระบบ AWS ไม่ว่าจะเป็น EC2, Lambda, ECS, RDS หรือบริการอื่น ๆ

CloudWatch ช่วยให้คุณสามารถ:

  • ✅ ดู Metrics แบบเรียลไทม์
  • ✅ เก็บและค้นหา Logs
  • ✅ ตั้งค่า Alarm เพื่อแจ้งเตือนอัตโนมัติ
  • ✅ สร้าง Dashboard รวมข้อมูลจากหลายบริการ

ตัวอย่างการเขียน Log จาก AWS Lambda

// index.mjs
export const handler = async (event) => {
  console.log("Request Received:", event);
  try {
    const response = { status: "ok", timestamp: Date.now() };
    console.log("Response:", response);
    return { statusCode: 200, body: JSON.stringify(response) };
  } catch (err) {
    console.error("Error:", err);
    throw err;
  }
};
    

Logs เหล่านี้จะถูกเก็บใน CloudWatch Log Group ของ Lambda Function โดยอัตโนมัติ

การตั้งค่า CloudWatch Alarm

Alarm ใช้สำหรับตรวจสอบค่าต่าง ๆ เช่น Error Rate หรือ Latency และแจ้งเตือนผ่าน Email, SNS หรือ PagerDuty เมื่อถึงเงื่อนไข

aws cloudwatch put-metric-alarm \
  --alarm-name HighErrorRate \
  --metric-name Errors \
  --namespace AWS/Lambda \
  --statistic Sum \
  --period 300 \
  --threshold 10 \
  --comparison-operator GreaterThanThreshold \
  --evaluation-periods 1 \
  --alarm-actions arn:aws:sns:ap-southeast-1:123456789012:NotifyMe
    

AWS X-Ray คืออะไร?

AWS X-Ray เป็นบริการที่ใช้สำหรับ Distributed Tracing ช่วยวิเคราะห์เส้นทางของคำขอในระบบ Microservices เช่น Lambda, API Gateway, ECS, และ DynamoDB เพื่อหาคอขวด (Bottleneck) หรือจุดที่เกิด Error

การเพิ่ม X-Ray ใน Lambda

เพียงเปิด X-Ray ใน Lambda Console หรือเพิ่ม Permission ต่อไปนี้:

{
  "Effect": "Allow",
  "Action": [
    "xray:PutTraceSegments",
    "xray:PutTelemetryRecords"
  ],
  "Resource": "*"
}
    

ตัวอย่างโค้ด Node.js ใช้ SDK ของ X-Ray:

import AWSXRay from 'aws-xray-sdk';
import AWS from 'aws-sdk';

AWSXRay.captureAWS(AWS);
const dynamo = new AWS.DynamoDB.DocumentClient();

export const handler = async (event) => {
  const result = await dynamo.scan({ TableName: "Orders" }).promise();
  return { statusCode: 200, body: JSON.stringify(result) };
};
    

Distributed Tracing คืออะไร?

Distributed Tracing ใช้สำหรับติดตามการไหลของคำขอผ่านหลายบริการในระบบ Microservices เช่น เมื่อผู้ใช้เรียก API Gateway → Lambda → DynamoDB → S3 เราสามารถดูได้ว่าแต่ละจุดใช้เวลานานเท่าไร และจุดใดเป็น Bottleneck

การดู Trace ด้วย X-Ray Console

ใน X-Ray Console คุณสามารถดู Trace Map ซึ่งแสดงภาพรวมของระบบ แต่ละ Node จะแสดงบริการ เช่น Lambda หรือ DynamoDB พร้อมเวลาตอบสนอง

การเชื่อมต่อ X-Ray กับ ECS/EKS

สำหรับระบบที่รันบน ECS หรือ EKS สามารถติดตั้ง X-Ray Daemon เพื่อติดตามการทำงานของ Container ได้ ตัวอย่าง Dockerfile:

FROM public.ecr.aws/xray/aws-xray-daemon:3.3.7
ENTRYPOINT ["/xray", "-o"]
    

จากนั้นใน Task Definition ของ ECS ให้เพิ่ม Container สำหรับ X-Ray Daemon รันควบคู่กัน

รวม Observability เข้ากับ CI/CD

การผสาน Observability เข้ากับ CI/CD Pipeline ช่วยให้ทีม DevOps ตรวจสอบได้ทันทีหลัง Deploy โดยสามารถเพิ่มขั้นตอน CloudWatch Metric Export หรือ X-Ray Trace Export เข้าไปใน Pipeline ได้

stages:
  - name: Deploy
    actions:
      - name: DeployToECS
      - name: Monitor
        run: aws cloudwatch get-metric-data ...
    

Best Practices สำหรับ Observability

  • ✅ เก็บ Logs แบบรวมศูนย์ (Centralized Logging)
  • ✅ ตั้ง Metric Alarm สำหรับบริการสำคัญ
  • ✅ ใช้ X-Ray Trace ID ผูกกับ Log Request ID
  • ✅ ทำ Visualization ด้วย CloudWatch Dashboard
  • ✅ ใช้ Tag เพื่อจัดกลุ่ม Service และ Environment

สรุป

Observability เป็นหัวใจของระบบ Cloud-native ที่ต้องการความน่าเชื่อถือสูง ด้วยเครื่องมืออย่าง CloudWatch และ X-Ray ทีมพัฒนาสามารถมองเห็นภาพรวมของระบบได้ครบทั้ง Logs, Metrics และ Traces ช่วยให้ตรวจจับปัญหาและปรับปรุงประสิทธิภาพของระบบได้อย่างรวดเร็ว

เมื่อเข้าใจหลักการ Observability แล้ว คุณจะสามารถออกแบบระบบที่มีความเสถียร และรองรับการขยายตัวของผู้ใช้ได้อย่างมั่นใจ 🚀

📘 บทความโดย King Pool

ภาพประกอบ: CloudWatch Metrics, X-Ray Trace Map, Distributed Tracing Flow

อ่านต่อ: การออกแบบระบบ Microservices ด้วย ECS / EKS

Leave a Reply

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *