Chuyển tới nội dung chính

AWS X-Ray & Application Performance Monitoring

Application Performance Monitoring (APM) giúp theo dõi hiệu suất ứng dụng từ bên trong. Giám sát hạ tầng (CPU, RAM) là chưa đủ - bạn cần biết điều gì đang xảy ra bên trong code của ứng dụng, đặc biệt trong kiến trúc microservices.

X-Ray SDK Maintenance Mode

Từ 25/02/2026, AWS X-Ray SDK/Daemon sẽ chuyển sang maintenance mode - chỉ fix security issues, không có feature mới. AWS khuyến nghị migrate sang OpenTelemetry để có hỗ trợ đầy đủ và tính năng mới nhất.


Khái niệm cốt lõi

Tracing (Truy vết)

Tracing theo dõi hành trình của một request khi nó đi qua nhiều dịch vụ khác nhau.

  • Trace ID: Mã định danh duy nhất gắn liền với request từ đầu đến cuối
  • Span: Một đơn vị công việc trong Trace (ví dụ: "Query Database", "Call Payment API")
  • Trace Map: Biểu đồ trực quan hóa luồng request qua các service

Instrumentation (Gắn đo lường)

Quá trình chèn code vào ứng dụng để thu thập dữ liệu trace:

  • Auto-instrumentation: Agent tự động bắt các framework phổ biến (Spring Boot, Express.js, Django, FastAPI) không cần sửa code
  • Manual-instrumentation: Tự viết code để đo lường các business logic đặc thù

AWS X-Ray

Dịch vụ APM native của AWS, tích hợp sâu với các AWS services.

Tính năng chính

  • Service Map: Tự động vẽ dependency graph giữa các service. Màu đỏ = lỗi, màu vàng = chậm, màu xanh = bình thường
  • Trace Timeline: Xem chi tiết thời gian xử lý của từng bước trong request
  • Integration: Tích hợp sẵn với API Gateway, Lambda, ECS, DynamoDB, RDS, SNS, SQS

Cách hoạt động

  1. Trên EC2/ECS: Cài đặt X-Ray Daemon và X-Ray SDK vào ứng dụng
  2. Trên Lambda: Bật Active Tracing trong configuration (X-Ray SDK đã được tích hợp sẵn)
  3. Ứng dụng gửi trace data qua UDP đến X-Ray Daemon, daemon upload lên X-Ray service

OpenTelemetry (Khuyến nghị hiện tại)

OpenTelemetry là tiêu chuẩn mở cho observability, được CNCF phát triển. AWS khuyến nghị dùng OpenTelemetry thay vì X-Ray SDK cho các ứng dụng mới và hiện tại.

Lợi ích so với X-Ray SDK

  • Vendor Neutral: Code một lần, chuyển backend (X-Ray, Prometheus, Datadog, Jaeger) chỉ cần đổi config
  • W3C Trace Context: Chuẩn công nghiệp cho cross-service tracing (thay vì X-Ray trace header riêng)
  • Hỗ trợ rộng: Nhiều ngôn ngữ, framework và library hơn X-Ray SDK
  • Future-proof: Nhận feature mới liên tục từ community + AWS

AWS Distro for OpenTelemetry (ADOT)

AWS cung cấp ADOT - phiên bản OTel được AWS đóng gói, tối ưu và hỗ trợ chính thức. ADOT có 2 cách triển khai:

Cách 1: ADOT SDK (Collector-less)

  • Gửi traces trực tiếp đến X-Ray OTLP endpoint: https://xray.[region].amazonaws.com/v1/traces
  • Gửi logs trực tiếp đến CloudWatch Logs OTLP endpoint: https://logs.[region].amazonaws.com/v1/logs
  • Không cần chạy ADOT Collector riêng
  • Phù hợp cho single application, Lambda

Cách 2: ADOT Collector

  • Nhận telemetry từ nhiều ứng dụng qua OTLP protocol
  • Xử lý, filter, transform data trước khi export
  • Gửi đến nhiều backend cùng lúc (X-Ray + CloudWatch + Prometheus)
  • Phù hợp cho môi trường phức tạp, nhiều service (ECS, EKS)

CloudWatch Application Signals

Tính năng mới từ AWS để monitor application health với OTel:

  • Tự động tạo SLI metrics (latency, availability, errors)
  • Integrated dashboards với X-Ray traces + CloudWatch metrics + logs
  • Transaction Search để tìm specific traces dựa trên attributes
  • Sử dụng ADOT để collect data

Migration Path:

Nếu đang dùng X-Ray SDK → Migrate sang ADOT SDK/Collector. Data vẫn hiển thị giống hệt trên X-Ray Console, không ảnh hưởng dashboard hiện tại.