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.