AWS X-Ray で実現する分散トレーシング - マイクロサービスのパフォーマンス分析
マイクロサービスのリクエスト全経路をサービスマップで可視化し、フィルター式で問題トレースを絞り込む。OpenTelemetry との統合パターンも紹介します。
X-Ray の概要
X-Ray は分散アプリケーションのリクエストをトレースし、パフォーマンスのボトルネックを特定するサービスです。API Gateway → Lambda → DynamoDB のようなサービスチェーンで、各ステップの所要時間とエラーを可視化します。サービスマップでマイクロサービスの依存関係を視覚的に把握し、レイテンシの高いサービスやエラー率の高いサービスを即座に特定できます。
トレースとサンプリング
X-Ray SDK をアプリケーションに組み込むと、HTTP リクエスト、AWS SDK コール、SQL クエリなどが自動的にトレースされます。Lambda と API Gateway は設定を有効にするだけでトレースが開始され、SDK の組み込みが不要です。サンプリングルールでトレースの収集率を制御します。デフォルトでは毎秒 1 リクエスト + 追加リクエストの 5% がサンプリングされます。高トラフィックのサービスではサンプリング率を下げてコストを抑え、低トラフィックのサービスでは 100% サンプリングで全リクエストをトレースします。
サービスマップとパフォーマンス分析
X-Ray のサービスマップはトレースデータから自動生成され、マイクロサービス間の依存関係、各サービスのレイテンシ、エラー率を視覚的に表示します。ノードの色がレイテンシやエラー率に応じて変化するため、問題のあるサービスを一目で特定できます。特定のノードをクリックすると、そのサービスのレスポンスタイム分布 (ヒストグラム) が表示され、 P50 、 P95 、 P99 のレイテンシを確認できます。フィルター式を使って特定の条件 (エラーが発生したトレース、レイテンシが 3 秒を超えたトレースなど) に絞り込むことで、問題の根本原因を効率的に調査できます。 Insights 機能は異常なレイテンシパターンを自動検出し、影響を受けたリクエストのサンプルトレースを提示します。 X-Ray の実践的な活用法を深めるには、専門書籍 (Amazon)が役立ちます。
OpenTelemetry との統合と実装パターン
X-Ray は OpenTelemetry (OTel) との統合をサポートしており、AWS Distro for OpenTelemetry (ADOT) を使って OTel SDK で計装したアプリケーションのトレースを X-Ray に送信できます。OTel SDK はベンダー中立な計装 API を提供するため、将来的にバックエンドを Jaeger や Zipkin に変更する場合もアプリケーションコードの修正が不要です。Lambda 関数では X-Ray のアクティブトレーシングを有効にするだけで自動計装され、SDK の組み込みは不要です。ECS や EKS では X-Ray デーモンをサイドカーコンテナとして配置し、アプリケーションコンテナからのトレースデータを収集します。カスタムサブセグメントを作成して、外部 API 呼び出しやデータベースクエリの個別のレイテンシを計測することも可能です。
X-Ray の料金
X-Ray の料金はトレースの記録数とスキャン数で構成されます。トレースの記録は最初の 100,000 件/月が無料で、以降は 100 万件あたり約 5.00 ドルです。トレースの取得 (スキャン) は 100 万件あたり約 0.50 ドルです。サンプリングレートを調整してトレース量を制御することが最も効果的なコスト最適化策です。高トラフィックのサービスではサンプリングレートを 1% に下げ、低トラフィックのサービスでは 100% にする差別化が推奨されます。Insights 機能は追加料金なしで利用できます。
まとめ
X-Ray はマイクロサービスアーキテクチャにおけるリクエストの全経路を可視化する分散トレーシングサービスです。サービスマップによる依存関係の把握、フィルター式による問題トレースの絞り込み、OpenTelemetry との統合によるベンダー中立な計装が主な特徴です。Lambda のアクティブトレーシングや ADOT サイドカーなど、デプロイ形態に応じた計装方法を選択できます。