X-Ray
AWS の分散トレーシングサービスで、リクエストの経路とレイテンシを可視化する
AWSオブザーバビリティ
X-Ray とは
AWS X-Ray は、分散トレーシングサービスで、リクエストが API Gateway → Lambda → DynamoDB のようにどのサービスを通過し、どこで時間がかかっているかを可視化する。マイクロサービスやサーバーレスアーキテクチャのパフォーマンス分析とデバッグに使う。
トレースマップ
[API Gateway] → [Lambda A] → [DynamoDB]
50ms 120ms 30ms
→ [Lambda B] → [SQS]
80ms 10ms
合計: 170ms
X-Ray はリクエストの全経路をトレースマップとして可視化し、ボトルネックを特定する。
Tracing: Active で Lambda の X-Ray トレーシングが有効になる。
トレースの構造
Trace (1 リクエスト全体)
└── Segment (API Gateway)
└── Subsegment (Lambda)
├── Subsegment (DynamoDB GetItem: 30ms)
└── Subsegment (外部 API 呼び出し: 200ms) ← ボトルネック
CloudWatch との連携
| サービス | 用途 |
|---|---|
| X-Ray | リクエストの経路とレイテンシ |
| CloudWatch Logs | ログの詳細 |
| CloudWatch Metrics | メトリクス (エラー率、レイテンシ) |
3 つを組み合わせてオブザーバビリティを実現する。
サンプリング
全リクエストをトレースするとコストが増加する。サンプリングルールで一部のリクエストのみトレースする。
{
"version": 2,
"default": { "fixed_target": 1, "rate": 0.05 }
}
1 秒あたり 1 リクエスト + 残りの 5% をサンプリング。
Lambda Powertools との統合
import { Tracer } from '@aws-lambda-powertools/tracer';
const tracer = new Tracer();
class MyHandler {
@tracer.captureMethod()
async getUser(id: string) { /* 自動的にサブセグメントが作成される */ }
}
さらに掘り下げるなら関連書籍が参考になる。