API Gateway → Lambda → DynamoDB → Lambda → SQS → Lambda → RDS. Request đi qua 5 service, một trong số đó chậm. Làm sao biết service nào? X-Ray vẽ service map cho thấy path, latency mỗi service, và bottleneck. X-Ray không phải lúc nào cũng cần, nhưng với request qua 5 service, không có nó thì mò mẫm lắm.

import { Tracer } from "@aws-lambda-powertools/tracer";
const tracer = new Tracer({ serviceName: "api-handler" });

export const handler = async (event: any) => {
  const segment = tracer.getSegment()!;
  const subsegment = segment.addNewSubsegment("## dbQuery");
  try {
    const result = await db.query("...");
    subsegment.close();
    return result;
  } catch (error) {
    tracer.addErrorAsMetadata(error as Error);
    subsegment.close(error as Error);
    throw error;
  }
};

tracer.putAnnotation("userId", "alice"); // Indexable, filterable
tracer.putMetadata("requestBody", body); // Debug only, không index

Sampling: kiểm soát cost

aws xray create-sampling-rule --sampling-rule '{
  "RuleName": "prod-10pct", "Priority": 1,
  "ReservoirSize": 10, "FixedRate": 0.1,
  "ServiceName": "*", "HTTPMethod": "*", "URLPath": "*", "Version": 1
}'

ReservoirSize = số trace/giây trước khi áp dụng FixedRate. Production: 10% trace. Staging: 100%.

Sampling 10% cho production, 100% cho staging — đừng bỏ qua bước này nếu không muốn bill AWS tăng vọt.

Bài sau: Phần 35: KMS — encryption key management