AWS X-Ray で実現する分散トレーシング - マイクロサービスのパフォーマンス分析

マイクロサービスのリクエスト全経路をサービスマップで可視化し、フィルター式で問題トレースを絞り込む。OpenTelemetry との統合パターンも紹介します。

X-Ray の概要

X-Ray は分散アプリケーションのリクエストをトレースし、パフォーマンスのボトルネックを特定するサービスです。API GatewayLambdaDynamoDB のようなサービスチェーンで、各ステップの所要時間とエラーを可視化します。サービスマップでマイクロサービスの依存関係を視覚的に把握し、レイテンシの高いサービスやエラー率の高いサービスを即座に特定できます。

トレースとサンプリング

X-Ray SDK をアプリケーションに組み込むと、HTTP リクエスト、AWS SDK コール、SQL クエリなどが自動的にトレースされます。LambdaAPI 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 の組み込みは不要です。ECSEKS では X-Ray デーモンをサイドカーコンテナとして配置し、アプリケーションコンテナからのトレースデータを収集します。カスタムサブセグメントを作成して、外部 API 呼び出しやデータベースクエリの個別のレイテンシを計測することも可能です。

X-Ray の料金

X-Ray の料金はトレースの記録数とスキャン数で構成されます。トレースの記録は最初の 100,000 件/月が無料で、以降は 100 万件あたり約 5.00 ドルです。トレースの取得 (スキャン) は 100 万件あたり約 0.50 ドルです。サンプリングレートを調整してトレース量を制御することが最も効果的なコスト最適化策です。高トラフィックのサービスではサンプリングレートを 1% に下げ、低トラフィックのサービスでは 100% にする差別化が推奨されます。Insights 機能は追加料金なしで利用できます。

ボトルネックの特定と根本原因分析

マイクロサービスでは、一つのリクエストが多数のサービスを経由するため、どこで遅延や障害が起きているのかを把握するのが困難です。X-Ray は、リクエストが通過した各サービスの所要時間を可視化し、どの区間が遅いのかを特定できます。処理を細かく区切って計測することで、データベースへの問い合わせや外部 API の呼び出しといった、ボトルネックとなっている箇所まで絞り込めます。エラーが発生した場合も、どのサービスのどの処理で起きたかをトレースから追跡できます。分散した処理を一連の流れとして可視化することが、根本原因の迅速な特定を可能にします。

運用での活用

X-Ray は、障害対応だけでなく、平常時の継続的な監視にも役立ちます。サービス同士の依存関係を示すサービスマップを見れば、システム全体の構成と健全性を一目で把握できます。レイテンシやエラー率の傾向を追い、性能が徐々に劣化していないかを監視します。メトリクスやログと組み合わせれば、数値の異常を検知した際に、トレースで具体的な原因を深掘りする、という流れで調査を進められます。性能の目標を定め、トレースのデータで達成状況を確認することもできます。可視化されたトレースを日常的に活用することが、安定したサービス運用を支えます。

まとめ

X-Ray はマイクロサービスアーキテクチャにおけるリクエストの全経路を可視化する分散トレーシングサービスです。サービスマップによる依存関係の把握、フィルター式による問題トレースの絞り込み、OpenTelemetry との統合によるベンダー中立な計装が主な特徴です。Lambda のアクティブトレーシングや ADOT サイドカーなど、デプロイ形態に応じた計装方法を選択できます。