X-Ray

AWS の分散トレーシングサービスで、リクエストの経路とレイテンシを可視化する

AWSオブザーバビリティ

X-Ray とは

AWS X-Ray は、分散トレーシングサービスで、リクエストが API GatewayLambdaDynamoDB のようにどのサービスを通過し、どこで時間がかかっているかを可視化する。マイクロサービスやサーバーレスアーキテクチャのパフォーマンス分析とデバッグに使う。

トレースマップ

トレースマップを図で示す。

[API Gateway][Lambda A][DynamoDB]
  50ms            120ms         30ms[Lambda B][SQS]
                                80ms         10ms
合計: 170ms

X-Ray はリクエストの全経路をトレースマップとして可視化し、ボトルネックを特定する。

Tracing: Active で Lambda の X-Ray トレーシングが有効になる。

トレースの構造

X-Ray のトレースは 1 つのリクエスト全体を表し、セグメント (各サービスの処理) とサブセグメント (サービス内の個別操作) で構成される。各セグメントに処理時間が記録されるため、どのサービスやどの DB 呼び出しがボトルネックかを視覚的に特定できる。

Trace (1 リクエスト全体)
  └── Segment (API Gateway)
        └── Subsegment (Lambda)
              ├── Subsegment (DynamoDB GetItem: 30ms)
              └── Subsegment (外部 API 呼び出し: 200ms) ← ボトルネック

CloudWatch との連携

CloudWatch との連携を以下にまとめる。

サービス 用途
X-Ray リクエストの経路とレイテンシ
CloudWatch Logs ログの詳細
CloudWatch Metrics メトリクス (エラー率、レイテンシ)

3 つを組み合わせてオブザーバビリティを実現する。

サンプリング

全リクエストをトレースするとコストが増加する。サンプリングルールで一部のリクエストのみトレースする。

{
  "version": 2,
  "default": { "fixed_target": 1, "rate": 0.05 }
}

1 秒あたり 1 リクエスト + 残りの 5% をサンプリング。

Lambda Powertools との統合

Lambda Powertools との 統合のコード例を示す。

import { Tracer } from '@aws-lambda-powertools/tracer';
const tracer = new Tracer();

class MyHandler {
  @tracer.captureMethod()
  async getUser(id: string) { /* 自動的にサブセグメントが作成される */ }
}

さらに掘り下げるなら関連書籍が参考になる。

この記事は役に立ちましたか?

関連用語

関連する記事