AWS X-Ray

分散アプリケーションのリクエストをエンドツーエンドで追跡・可視化するトレーシングサービスで、マイクロサービス間のレイテンシやエラーのボトルネックを特定する

概要

AWS X-Ray は、分散アプリケーションのリクエストフローをトレース (追跡) し、サービスマップとして可視化するサービスです。リクエストが API Gateway → Lambda → DynamoDB → SQS → Lambda と複数のサービスを経由する場合、各サービスでの処理時間、エラー率、スロットリングの発生状況をエンドツーエンドで確認できます。X-Ray SDK をアプリケーションに組み込むか、Lambda や API Gateway の組み込みトレーシング機能を有効にするだけで、トレースデータが自動的に収集されます。トレースデータの保持期間は 30 日間で、料金は記録されたトレース数と取得したトレース数に基づきます。

トレース、セグメント、サブセグメントの構造

X-Ray のデータモデルは 3 層構造です。トレースは、1 つのリクエストがシステムを通過する全体の経路を表します。トレースは一意のトレース ID で識別され、リクエストの開始から完了までのすべての処理を含みます。セグメントは、トレース内の各サービスの処理を表します。API Gateway のセグメント、Lambda のセグメント、DynamoDB のセグメントがそれぞれ独立して記録されます。サブセグメントは、セグメント内の詳細な処理を表します。Lambda 関数内で DynamoDB API を呼び出した場合、その API 呼び出しがサブセグメントとして記録されます。HTTP リクエスト、SQL クエリ、AWS SDK の呼び出しなどが自動的にサブセグメントとして記録されます。サービスマップは、トレースデータから自動生成される視覚的なグラフで、サービス間の依存関係、各サービスのレイテンシ、エラー率を一目で把握できます。

サンプリングとコスト管理

X-Ray はデフォルトでサンプリングルールを適用し、すべてのリクエストではなく一部のリクエストだけをトレースします。デフォルトのサンプリングルールは、1 秒あたり 1 リクエスト + 追加リクエストの 5% です。高トラフィックのアプリケーションですべてのリクエストをトレースすると、コストが膨大になるため、サンプリングは重要です。カスタムサンプリングルールを定義すれば、特定の URL パスやサービスに対して異なるサンプリング率を設定できます。たとえば、ヘルスチェックエンドポイントのサンプリング率を 0% に設定し、決済エンドポイントのサンプリング率を 100% に設定する、といった使い分けが可能です。X-Ray の料金は、記録されたトレース 100 万件あたり 5 USD、取得したトレース 100 万件あたり 0.50 USD です。無料枠として、毎月最初の 10 万トレースの記録と 100 万トレースの取得が無料です。

実務での活用パターン

X-Ray の最も価値のある活用は、レイテンシのボトルネック特定です。ユーザーから「API が遅い」という報告があった場合、X-Ray のトレースを確認すれば、どのサービスのどの処理に時間がかかっているかを即座に特定できます。DynamoDB のクエリに 500ms かかっているのか、外部 API の呼び出しに 2 秒かかっているのか、Lambda のコールドスタートに 3 秒かかっているのかが一目瞭然です。エラーの根本原因分析にも有効です。500 エラーが発生した場合、X-Ray のトレースでエラーが最初に発生したサービスとその詳細 (例外メッセージ、スタックトレース) を確認できます。CloudWatch ServiceLens と統合すれば、メトリクス、ログ、トレースを統合したビューで問題を分析できます。Azure の対応サービスは Azure Application Insights で、同様に分散トレーシングとアプリケーションパフォーマンス監視を提供します。X-Ray の基礎から応用まで、書籍 (Amazon)で体系的に学べます。

共有するXB!