メニュー
AWS X-Ray
開発者ガイド

AWS X-Ray の概念

AWS X-Ray はサービスからセグメント形式でデータを受け取り、共通するリクエストのセグメントをグループ化してトレースにし、トレースを処理してサービスグラフを生成しアプリケーションをビジュアルで表現します。

セグメント

アプリケーションロジックを実行しているコンピューティングリソースは、実行している作業に関するデータをセグメント形式で送信します。セグメントには、リソースの名前、リクエストの詳細、および行った作業の詳細が含まれています。たとえば、HTTP リクエストがアプリケーションに到達すると、次のデータが記録されます。

  • ホスト – ホスト名、エイリアスまたは IP アドレス

  • リクエスト – メソッド、クライアントアドレス、パス、ユーザーエージェント

  • レスポンス – ステータス、コンテンツ

  • 行った作業 – 開始および終了時刻、サブセグメント

X-Ray SDK はリクエストおよびレスポンスのヘッダー、アプリケーションのコード、およびそれを実行する AWS リソースに関するメタデータから情報を収集します。アプリケーション設定の変更を追加したり、受信リクエスト、ダウンストリームリクエスト、AWS SDK クライアントを計測するコードを追加することで、収集するデータを選択できます。

転送されたリクエスト

ロードバランサーなどを仲介してリクエストがアプリケーションに転送される場合、セグメントのクライアント IP は、IP パケットのソース IP からではなく、リクエストの X-Forwarded-For ヘッダーから取得されます。転送されたリクエストに記録されているクライアント IP は偽造されている可能性があるため、信頼すべきではありません。

サブセグメント

完了した作業に関するデータはサブセグメントに分割できます。これは、より細かい時間情報、および元のリクエストを満たすためにアプリケーションが実行したダウンストリーム呼び出しに関する詳細を提供します。サブセグメントには、AWS のサービス、外部 HTTP API、SQL データベースに対する呼び出しに関する追加の詳細を含めることができます。アプリケーションのコードの特定の関数または行を計測する任意のサブセグメントを定義することもできます。

サービスグラフ

X-Ray はアプリケーションが送信したデータを使用してサービスグラフを生成します。X-Ray にデータを送信する各 AWS リソースはサービスとして表示され、エッジでリクエスト処理に一緒に使用するサービスに接続されています。

サービス名

セグメントの name は、セグメントを生成したサービスのドメイン名または論理名と一致すべきですが、これは強制されません。PutTraceSegments へのアクセス権限を持つどのアプリケーションでも、任意の名前でセグメントを送信できます。

たとえば、アプリケーションでアプリケーションロードバランサーを使用してトラフィックを Amazon EC2 インスタンスに分散します。このとき、AWS SDK を使用して DynamoDB に接続してデータを保存し、外部ウェブ API に対する HTTP 呼び出しを行います。X-Ray サービスグラフでは、インスタンス、DynamoDB、テーブル、ダウンストリーム HTTP API はすべてエッジで接続された個別のサービスとして表示されます。

トレース

アプリケーションを経由するリクエストのパスは、トラック ID を使用して追跡されます。トレースは 1 つのリクエストで生成されたすべてのセグメントを収集します。通常は、ロードバランサー間で移動し、アプリケーションコードにヒットして、別の AWS のサービスまたは外部ウェブ API に対するダウンストリーム呼び出しを生成する HTTP GET または POST リクエストです。最初に通信したサポート対象サービスによって行われた各 HTTP リクエストに対してトレース ID ヘッダーが追加され、ダウンストリームで伝達されてレイテンシー、廃棄、その他のリクエストデータを追跡します。

サンプリング

アプリケーションが処理するリクエストの代表的なサンプルを提供しながら効率的にトレースするために、リクエストが最初にヒットするサービスによってサンプリングアルゴリズムが適用され、トレースするリクエストが決定されます。デフォルトのサンプリングルールを変更して、X-Ray SDK を使用してアプリケーションが処理する異なるルートで異なるサンプリングレートを設定できます。

トレースヘッダー

構成可能な最小値まではすべてのリクエストがトレースされます。その後はリクエストの一定の割合がトレースされ、不要なコストを避けます。サンプリングデシジョンおよびトレース ID は、HTTP リクエストの X-Amzn-Trace-Id という名前のトレースヘッダーに追加されます。トレースヘッダーは、リクエストがヒットした最初の X-Ray 組み込みサービスによってリクエストに追加され、X-Ray SDK によって読み取られ、レスポンスに含まれます。

例 ルートトレース ID 突きのトレースヘッダーおよびサンプリングデシジョン

X-Amzn-Trace-Id: Root=1-5759e988-bd862e3fe1be46a994272793; Sampled=1

トレースヘッダーのセキュリティ

トレースヘッダーは、X-RaySDK、AWS サービス、またはクライアントリクエストから発信されます。アプリケーションで受信リクエストから X-Amzn-Trace-Id を削除し、ユーザーが自分のリクエストにトレース ID またはサンプリングデシジョンを追加することで発生する問題を回避できます。

計測対象アプリケーションからのリクエストの場合は、親セグメント ID をトレースヘッダーに含めることもできます。たとえば、アプリケーションで計測対象 HTTP クライアントを使用してダウンストリーム HTTP ウェブ API を呼び出す場合、X-Ray SDK は元のリクエストのセグメントの ID をダウンストリームリクエストのトレースヘッダーに追加します。ダウンストリームリクエストを処理する計測対象アプリケーションで、親セグメント ID を記録して 2 つのリクエストを接続できます。

例 ルートトレース ID、親セグメント ID およびサンプリングデシジョンを含むトレースヘッダー

X-Amzn-Trace-Id: Root=1-5759e988-bd862e3fe1be46a994272793; Parent=53995c3f42cd8ad8; Sampled=1

フィルタ式

サンプリングされている場合でも、複雑なアプリケーションでは大量のデータが生成されます。AWS X-Ray コンソールでは、操作が簡単なサービスグラフのビューを提供します。問題を識別しアプリケーションを最適化するために役立つ健全性とパフォーマンス情報が表示されます。高度なトレースでは、個別のリクエストのトレースを掘り下げたり、フィルタ式を使用して特定のパスまたはユーザーに関連するトレースを検索したりできます。