AWS - DVA-C02

🔍 Ôn Thi AWS DVA-C02: AWS X-Ray – Giám sát hiệu năng và truy vết phân tán (Distributed Tracing)

🧩 AWS X-Ray là gì?

AWS X-Ray là dịch vụ giúp bạn truy vết (trace) luồng xử lý yêu cầu trong các ứng dụng phân tán, từ front-end đến backend, để:

  • Hiểu rõ hành trình của mỗi request
  • Phát hiện bottlenecks, latency cao
  • Debug lỗi phức tạp
  • Phân tích hiệu năng toàn hệ thống

🎯 Khi nào nên dùng AWS X-Ray?

  • Ứng dụng có nhiều microservices (ECS, Lambda, API Gateway…)
  • Khó xác định vấn đề từ log đơn thuần
  • Cần nhìn rõ toàn bộ lifecycle của 1 request
  • Muốn tạo bản đồ dịch vụ (service map)

🧪 Cách hoạt động

Khi một yêu cầu đi qua hệ thống:

  1. AWS X-Ray ghi lại segment (các phần) của yêu cầu.
  2. Các service như API Gateway, Lambda, EC2, DynamoDB sẽ gửi trace data về X-Ray.
  3. Dữ liệu được tổng hợp và hiển thị thành service maptimeline.

⚙️ Các bước cài đặt và cấu hình X-Ray theo từng môi trường


🟢 1. Cài đặt X-Ray cho AWS Lambda

✅ Cách 1: Bật trực tiếp trong AWS Console

  • Vào function Lambda → “Configuration” → “Monitor” → “Enable active tracing”
  • AWS sẽ tự động gửi trace đến X-Ray
  • Không cần cài đặt thêm gì

✅ Cách 2: Qua AWS SAM hoặc CloudFormation

Tracing: Active

✅ IAM Role cần:

Lambda role phải có quyền:

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

🟠 2. Cài đặt X-Ray cho Amazon ECS / Fargate

✅ Cách cài đặt:

  1. Tạo 1 sidecar container trong ECS Task Definition chạy X-Ray daemon:
    • Image: amazon/aws-xray-daemon
  2. App container cấu hình SDK để gửi trace đến 127.0.0.1:2000
  3. Cấu hình IAM Role có quyền gửi trace

🧱 Ví dụ task definition:

"containerDefinitions": [
  {
    "name": "app",
    "image": "your-app-image",
    "environment": [
      { "name": "AWS_XRAY_DAEMON_ADDRESS", "value": "127.0.0.1:2000" }
    ]
  },
  {
    "name": "xray-daemon",
    "image": "amazon/aws-xray-daemon",
    "essential": false
  }
]

🔵 3. Cài đặt X-Ray cho Amazon EC2

✅ Cách cài đặt:

  1. Cài X-Ray daemon bằng script:
curl https://s3.amazonaws.com/aws-xray-assets.us-east-1/xray-daemon/aws-xray-daemon-linux-3.x.zip -o xray.zip
unzip xray.zip
sudo ./xray -o
  1. Cài AWS SDK (Java, Node.js, Python…) trong app
  2. Cấu hình SDK để gửi trace đến local daemon (UDP 2000)
  3. EC2 Instance IAM Role cần cấp quyền X-Ray như trên

💡 Dùng Systems Manager để cài đặt tự động cho nhiều EC2


🔴 4. Cài đặt X-Ray cho API Gateway

  • Chỉ cần bật “Tracing” trong cấu hình stage của API Gateway
  • Không cần cài đặt gì thêm
  • Tích hợp tốt với Lambda để tạo trace toàn tuyến

📈 Giao diện phân tích của X-Ray

Khi dữ liệu được gửi đến X-Ray, bạn sẽ thấy:

  • Service Map: Biểu đồ luồng request giữa các service
  • Traces: Chi tiết thời gian xử lý từng phần
  • Annotations và Metadata: Bạn có thể gắn tag tùy chỉnh
  • Time series latency graph

🧠 Gợi ý câu hỏi thường gặp trong kỳ thi DVA-C02


✅ Câu hỏi 1:

Một developer muốn theo dõi hiệu năng của function Lambda khi được gọi qua API Gateway. Cách nào đơn giản nhất?

A. Ghi log thủ công
B. Dùng CloudWatch
C. Bật tracing trên API Gateway và Lambda
D. Tạo custom metric

👉 Đáp án đúng: C


✅ Câu hỏi 2:

ECS Fargate cần gửi trace đến X-Ray. Cấu hình nào cần thiết?

A. Dùng AWS FireLens
B. Dùng EC2 agent
C. Tạo sidecar container chạy X-Ray daemon
D. Cài SDK trong host EC2

👉 Đáp án đúng: C


💡 Best Practices khi dùng AWS X-Ray

TipsGợi ý
Bật tracing trên mọi service chínhLambda, API Gateway, ECS, SQS
Dùng SDK để add custom segmentGhi chú thêm các step trong app
Gắn tag để trace theo userId/requestIdHỗ trợ debug nâng cao
Sử dụng IAM Role riêng cho traceGiữ hệ thống an toàn
Kết hợp CloudWatch + X-RayHiển thị cảnh báo nếu latency cao

📝 Tổng kết

  • AWS X-Ray là công cụ đắc lực để hiểu luồng request trong hệ thống phân tán.
  • Gắn X-Ray vào Lambda cực kỳ dễ, còn ECS thì nên dùng sidecar.
  • API Gateway, Lambda, EC2 đều hỗ trợ X-Ray native.
  • Đây là một phần kiến thức hay ra đề trong AWS DVA-C02, cả ở mức cơ bản và nâng cao.

28 Views

Leave a Reply

Your email address will not be published. Required fields are marked *