とは AWS X-Ray - AWS X-Ray

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

とは AWS X-Ray

AWS X-Ray は、計測されたアプリケーションが行う受信レスポンスと呼び出しに関するトレース情報を提供します。これには、以下が含まれます。

  • ダウンストリーム AWS リソース

  • マイクロサービス

  • データベース

  • ウェブ APIs

トレースデータとビジュアライゼーションを使用して、アプリケーションのパフォーマンスに関するインサイトを取得し、問題を特定し、最適化の機会を見つけます。X-Ray の分析ツールを使用して、アプリケーションへのトレースされたリクエストの詳細を表示、フィルタリング、調査します。

X-Ray の仕組み

X-Ray を使用するには、X-Ray がアプリケーションがリクエストをどのように処理するかを追跡できるように、まずアプリケーションを計測する必要があります。アプリケーションにインストルメンテーションを追加すると、X-Ray はアプリケーション内の受信およびアウトバウンドリクエストやその他のイベントのトレースデータとメタデータを送信できます。例えば、Java アプリケーション AWS のサービス が行うすべての受信 HTTP リクエストと へのダウンストリーム呼び出しを計測できます。アプリケーションを自動的に計測することもできます。詳細については、「アプリケーションの計測」を参照してください。

X-Ray は、計測されたアプリケーションが受け取るすべてのリクエストにトレース ID を割り当てます。アプリケーションが別のコンポーネントとやり取りする場合、X-Ray はセグメントを作成します。このセグメントは元のトレース ID に関連付けられ、そのコンポーネントとのやり取りの品質を追跡します。

X-Ray は、アプリケーションワークフロー全体でトレース ID とセグメントを追跡します。ワークフロー全体を分析したり、詳細分析のためにピースを分離したりできます。セグメントの詳細については、次の概念セクションを参照してください。

X-Ray は、アプリケーションがサービスノードまたはコンポーネントとやり取りするときに追跡し、受信リクエストを次のように処理します。

  1. X-Ray はトレース ID とセグメントを使用して個々のインタラクションを追跡します。

  2. AWS エージェントはトレース ID と関連するセグメントを収集し、SDK または API トレースフレームワークに渡します。

  3. X-Ray は、X-Ray と統合されている AWS サービスとのインタラクションも追跡します。

  4. エージェントはデータをコンソール GUI に送信し、トレース、セグメント、サブセグメント、およびこれらのコンポーネントの相互作用に関する情報を表示できます。

前のステップを次の図に示します。

X-Ray は、アプリケーションリクエストに関する詳細情報を表示します。

X-Ray がインストルメント化されたアプリケーションとやり取りする方法

計測されたアプリケーションがリクエストを受信すると、X-Ray は以下を実行します。

  1. アプリケーションがリクエストを処理すると、X-Ray SDK はトレースデータを AWS コレクターまたはエージェント に送信します。次に、エージェントはトレース ID とセグメントを収集します。次の 3 つのエージェントから選択できます。

    • AWS Distro for OpenTelemetry (ADOT) Collector – オープンソースの標準化されたOpenTelemetryエージェント に基づいて AWS、 によって最適化および保護されるオープンソースコレクター。言語やベンダーに依存しない標準化されたコードADOT Collectorを使用してエージェントとやり取りするが、 AWS セキュリティと最適化の信頼度がエンドユーザーに組み込まれている場合は、 を使用します。ADOT を使用して、エンドポイントをさまざまなエージェントやバックエンドに設定することもできます。

    • Amazon CloudWatch エージェント – ログ、メトリクス、トレースを統合し、すべてのテレメトリデータをサポートし、 をそのデータADOT Collectorに統合したオープンソースコレクター。

    • X-Ray デーモン — X-Ray SDK および X-Ray APIs レガシーコードがある場合、またはカスタマイズされたトレースを必要とするアプリケーションがあり、X-Ray APIsを使用する必要がある場合は、X-Ray デーモンを使用します。デーモンは、Linux、、Microsoft Windowsおよび で利用できmacOS、 AWS Elastic Beanstalk および AWS Lambda プラットフォームに含まれています。

  2. 次に、エージェントは API または AWS API 上に構築された SDK のいずれかで構成されるトレースフレームワークにこのデータを送信します。 AWS このフレームワークは、他の AWS サービスとやり取りします。X-Ray API は、 AWS SDK を介して AWS Command Line Interface、または 経由で直接、すべての X-Ray 機能へのアクセスを提供しますHTTPS。言語を使用している場合、または SDK でサポートされていないオペレーションが必要な場合は、X-Ray API を使用します。

    次の SDKsを使用できます。

    • ADOT SDK – ADOT SDK を使用して、 に関連しないベンダーのさまざまなエージェントとやり取りします AWS。ADOT SDK は複数のバックエンドサービスもサポートしています。

    • X-Ray SDK – 機能や言語を追加しなくなったクラシック製品。アプリケーションコードを更新しない場合は、X-Ray SDK を使用します。

    X-Ray または ADOT SDK を使用している場合は、 エージェントと組み合わせて次のオプションを使用できます。

    • CloudWatch エージェントで X-Ray または ADOT SDK を使用する – 推奨。

    • で ADOT SDK を使用する ADOT Collector – セキュリティと最適化の AWS レイヤーでベンダーに依存しないソフトウェアを使用する場合は、 が推奨されます。

    • CloudWatch エージェントで X-Ray SDK を使用する – CloudWatch エージェントは X-Ray SDK と互換性があります。

    • X-Ray SDK を X-Ray デーモンで使用する – X-Ray SDK を引き続き使用する場合に使用します。

  3. (オプション) トレースフレームワークは、他の AWS サービス、HTTPサーバー、その他のメソッドやクエリとやり取りできます。X-Ray と統合する一部の AWS サービスには、Amazon EC2 Amazon SNS と API Gateway が含まれます。SDK または API は、これらのインタラクション中のトレースデータを追跡します。

    AWS X-Ray と統合する のサービスは、受信リクエストにトレースヘッダーを追加したり、X-Ray にトレースデータを送信したり、エージェントを実行してトレースデータを収集したりできます。例えば、 AWS Lambda はリクエストに関するトレースデータを Lambda 関数に送信できます。

    X-Ray と連携する他のサービスの詳細については、「」を参照してください他の AWS X-Ray との統合 AWS のサービス

  4. トレース、セグメント、およびサブセグメントに関するデータは、グラフィカルユーザーインターフェイス (GUI) でコンソールで表示できます。次のオプションを設定できます。

    • https://console.aws.amazon.com/cloudwatch/ – トレース、ログ、メトリクスを 1 か所で表示するための GUI エクスペリエンス。X-Ray サービスマップとレガシー CloudWatchServiceLensマップは、 CloudWatch コンソール内の X-Ray トレースマップに結合されます。

    • https://console.aws.amazon.com/xray/home — トレースに関する情報を表示できる GUI エクスペリエンス。トレース、トレースマップ、サービスマップ、分析に関するインサイトを含む情報を表示できます。 AWS は、このコンソールエクスペリエンスを開発していません。

X-Ray は、アプリケーションが操作する AWS リソースからのトレースデータを使用して、詳細なトレースマップ を生成します。トレースマップには、フロントエンドサービスが 1 回のリクエストで呼び出すクライアント、フロントエンドサービス、バックエンドサービスが表示されます。トレースマップを使用して、アイデンティティのボトルネック、レイテンシースパイク、その他の問題を特定し、アプリケーションのパフォーマンスを解決または改善します。

X-Ray は、アプリケーションがサービスノードとやり取りする方法の全体像を示すサービスマップも生成します。サービスマップのエッジは、サービスノードを接続します。ノードが相互に通信する頻度と、それらの通信のレイテンシーを示します。

次の図は、アプリケーションが異なるコンポーネントとどのように相互作用するかを示すサービスマップの例を示しています。コンソールでサービスマップを表示できます。イメージは、クライアントからリクエストを受信するアプリケーションを示しています。次に、このイメージは、アプリケーションが 2 つの DynamoDB テーブルと Amazon SNS とどのようにやり取りするかを示しています。

トレースマップには、フロントエンドサービスがリクエストを処理してデータを保持するために呼び出すクライアント、フロントエンドサービス、バックエンドサービスが表示されます。

次の画像は、トレース内の 1 つのセグメントのコンソールで使用できるデータの例です。この図は、複数のセグメントと、各セグメントが他のセグメントに関連して実行された開始時間と期間を一覧表示したタイムラインを示しています。このイメージには、セグメントのステータスと HTTP レスポンスコードも表示されます。

X-Ray は、ステータス、期間、HTTP レスポンスコードなど、アプリケーションリクエストに関する詳細情報を表示します。

概念

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

セグメント

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

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

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

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

  • 完了した作業 — 開始時刻と終了時刻、サブセグメント。

  • 発生する問題エラー、障害、例外 (例外スタックの自動取得を含む)。

次の画像は、セグメントについて返される概要情報の例です。イメージには、ID、開始時刻と終了時刻、エラーまたは障害、HTTP リクエストからのリクエストとレスポンスコードに関する情報が表示されます。

X-Ray トレースのセグメントデータ

SDKs または APIsで構成されるトレースフレームワークは、リクエストヘッダーとレスポンスヘッダー、アプリケーション内のコード、およびアプリケーションが実行される AWS リソースに関するメタデータから情報を収集します。X-Ray が収集するデータを選択するには、アプリケーション設定またはコードを変更して、受信リクエスト、ダウンストリームリクエスト、および AWS サービスを計測します。

転送されたリクエスト

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

SDK や API などのトレースフレームワークを使用して、注釈やメタデータなどの詳細情報を記録できます。セグメントとサブセグメントの構造と記録された情報の詳細については、「」を参照してくださいX-Ray セグメントドキュメント。セグメントのドキュメントのサイズは最大 64 kB まで可能です。

サブセグメント

セグメントをサブセグメント に分割できます。サブセグメントは、アプリケーションが元のリクエストを処理するために行うダウンストリーム呼び出しに関するより詳細なタイミング情報と詳細を提供します。サブセグメントには、、外部 HTTP API AWS のサービス、または SQL データベースへの呼び出しに関する追加の詳細が含まれています。サブセグメントを定義して、アプリケーション内の特定の関数またはコード行を計測することもできます。

サブセグメントは、セグメントよりも詳細な情報を提供します。

X-Ray はサブセグメントを使用して、Amazon DynamoDB など、独自のセグメントを送信しないサービスのトレースマップ上に推定セグメントとダウンストリームノードを生成します。サブセグメントを使用すると、依存関係がトレースをサポートしていない場合や、 の外部にある場合でも、ダウンストリームのすべての依存関係を確認できます AWS。

サブセグメントは、クライアントとしてのダウンストリーム呼び出しのアプリケーションビューを表します。ダウンストリームサービスも計測されている場合、そのセグメントはアップストリームクライアントのサブセグメントから推測されたセグメントを置き換えます。サービスグラフ上のノードは、利用可能な場合、サービスのセグメントからの情報を使用します。2 つのノード間のエッジは、アップストリームサービスのサブセグメントを使用します。

例えば、計測された AWS SDK クライアントで DynamoDB を呼び出すと、X-Ray SDK はその呼び出しのサブセグメントを記録します。DynamoDB はセグメントを送信しないため、サブセグメントには以下に関する情報が含まれます。

  • トレース内の推定セグメント。

  • サービスグラフの DynamoDB ; ノード。

  • サービスと DynamoDB 間のエッジ。

次の図は、サンプルアプリケーションのサービスマップを示しています。イメージでは、クライアントはサンプルの Scorekeep アプリケーションにリクエストを行います。Scorekeep アプリケーションは DynamoDB に 2 つの呼び出しを行います。サービスマップのエッジは、これらの各呼び出しを表します。エッジを選択すると、DynamoDB テーブルに対して行われた呼び出しのヘルスステータス、数、および頻度が表示されます。次の画像は、レスポンスタイムでフィルタリングされたエッジに対応するトレースを示しています。

エッジは、計測されたアプリケーションと DynamoDB テーブルを接続します。

計測されたアプリケーションで別の計測されたサービスを呼び出すと、ダウンストリームサービスは独自のセグメントを送信します。このセグメントは、アップストリームサービスがサブセグメントに記録したのと同じ呼び出しのビューを記録します。サービスグラフでは、両方のサービスのノードにセグメントからのタイミングとエラー情報が含まれています。それらの間のエッジには、アップストリームサービスのサブセグメントからの情報が含まれます。ダウンストリームサービスは、リクエストの作業を開始および終了した時刻を記録します。アップストリームサービスは、リクエストが 2 つのサービス間の移動に費やした時間を含むラウンドトリップレイテンシーを記録します。

次の図は、アップストリーム Lambda 関数に対応するエッジからの応答時間でフィルタリングされたトレース情報を示しています。

計測されたアプリケーションから別の計測されたアプリケーションを呼び出すリクエストに対する時間の経過に伴う値として表示される応答時間。

サービスグラフ

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

サービス名

セグメントの name は、セグメントを生成するサービスのドメイン名または論理名と一致する必要があります。ただし、これは強制ではありません。PutTraceSegmentsにアクセス許可を持つアプリケーションは、任意の名前でセグメントを送信できます。

サービスグラフは、アプリケーションを構成するサービスおよびリソースに関する情報を含む JSON ドキュメントです。X-Ray コンソールでは、サービスグラフを使用して、視覚化またはサービスマップを生成します。

次の図は、サービスマップを示しています。サービスマップには、アプリケーションに対するクライアントのリクエストと、アプリケーションがリクエストを処理するために操作するサービスとの関係が表示されます。次の画像では、サンプル Scorekeep アプリケーションが 2 つの DynamoDB テーブルと Amazon SNS とやり取りしています。

トレースマップ

分散アプリケーションでは、X-Ray は、同じトレース ID でリクエストを処理するすべてのサービスのノードを 1 つのサービスグラフに結合します。リクエストがインタラクションする最初のサービスには、フロントエンドと呼び出すサービスの間で伝達されるトレースヘッダーが追加されます。

例えば、Scorekeep は AWS Lambda 関数を呼び出してランダムな名前を生成するウェブ API を実行します。次に、X-Ray SDK はトレース ID を生成し、Lambda 関数への呼び出しを追跡します。 AWS Lambda トレースデータとトレース ID を Lambda 関数に渡します。X-Ray SDK は、同じトレース ID を使用してエージェントまたはコレクターにデータを送信します。その結果、API、 AWS Lambda サービス、および Lambda 関数のノードはすべて、トレースマップ上に個別の接続ノードとして表示されます。

サービスグラフのデータは 30 日間保持されます。

トレース

トレースでは、1 つのリクエストで生成されたセグメントをすべて収集します。トレースはトレース ID を使用して、アプリケーション経由のリクエストのパスを追跡します。このリクエストは通常、ロードバランサーを経由し、アプリケーションコードとやり取りし、他の AWS のサービスまたは外部ウェブ APIs。HTTP リクエストがインタラクションする最初のサポート対象サービスは、トレース ID ヘッダーをリクエストに追加します。ITheサービスはトレース ID をダウンストリームに伝播して、レイテンシー、処理、およびその他のリクエストデータを追跡します。

次の図は、 HTTPリクエストを処理するアプリケーションの例を示しています。トレースの概要には、HTTPレスポンスコード、リクエストの処理時間、アプリケーションがリクエストを処理した時間が含まれます。次の図は、各トレースセグメントのタイムラインも示しています。タイムラインには、ステータス、HTTPレスポンスコード、セグメントの終了にかかった時間が表示されます。グラフには、トレース内の各セグメントの他のセグメントに対する期間、開始時刻、終了時刻が表示されます。

単一のリクエストによって生成されるすべてのセグメントを収集するトレースのタイムライン表示

X-Ray がトレースコレクションに請求する方法の詳細については、「X-Ray トレースの請求方法に関するAWS X-Ray 料金」を参照してください。トレースデータは 30 日間保持されます。

サンプリング

X-Ray SDK はサンプリングアルゴリズムを適用して、効率的なトレースを確保し、アプリケーションが処理するリクエストの代表的なサンプルを提供します。このアルゴリズムは、トレースするリクエストを決定します。デフォルトでは、X-Ray SDK は 1 秒ごとに最初に受信したリクエストと、追加のリクエストの 5% を記録します。

開始時にサービス料がかからないように、デフォルトのサンプリングレートは控えめになっています。 デフォルトのサンプリングレートを変更するように X-Ray を設定し、サービスまたはリクエストのプロパティに基づいてサンプリングを適用する追加のルールを設定できます。

例えば、サンプリングを無効にして、状態を変更したり、ユーザーやトランザクションを処理したりする呼び出しのすべての要求をトレースすることができます。バックグラウンドポーリング、ヘルスチェック、接続メンテナンスなど、大量の読み取り専用呼び出しの場合。

詳細については、サンプリングルールを設定する「」およびCreateSamplingRule「 API」を参照してください。

トレースヘッダー

すべてのリクエストは、設定できる最小数までトレースされます。その最小値に達した後、X-Ray は追加コストを回避するためにリクエストのごく一部のみをトレースします。X-Ray は、 で始まるトレースヘッダーの HTTP リクエストにサンプリング決定とトレース ID を追加しますX-Amzn-Trace-Id。X-Ray は、リクエストが X-Ray と統合されている最初の AWS サービスとやり取りするときに、これらのヘッダーを追加します。X-Ray SDK はこれらのヘッダーを読み取り、レスポンスに含めます。

例 ルートトレース ID 突きのトレースヘッダーおよびサンプリングデシジョン
X-Amzn-Trace-Id: Root=1-5759e988-bd862e3fe1be46a994272793;Sampled=1
トレースヘッダーのセキュリティ

トレースヘッダーは、X-Ray SDK、 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

Lambda やその他の は、処理メカニズムの一部として で始まるヘッダーLineageの一部を追加する AWS のサービス 場合があります。トレースヘッダーの付加部分を直接使用しないでください。

例 Lineage を含むトレースヘッダー
X-Amzn-Trace-Id: Root=1-5759e988-bd862e3fe1be46a994272793;Sampled=1;Lineage=a87bd80c:1|68fd508a:5|c512fbe3:2

フィルタ式

データの小さなサブセットをサンプリングした場合でも、複雑なアプリケーションは大量のトレースデータを生成できます。フィルター式を使用すると、個々のリクエスト、特定のパス、ユーザーに関するトレースなど、特定のトレースを検索できます。

次の図は、定義したグループでフィルタリングするために使用できる X-Ray コンソールのテキストボックスを示しています。グループの詳細については、次の「グループ」セクションを参照してください。

トレースを選択して個々のリクエストの詳細を表示する

グループ

フィルター式内のグループを使用して、トレースデータの量を減らし、グループ基準に適合するデータに集中できます。

グループを使用して、そのグループに固有のサービスグラフ、トレースの概要、 CloudWatch メトリクスを生成します。名前または Amazon リソースネーム (ARN) で を呼び出すことができます。X-Ray は、受信トレースを X-Ray サービスに保存されているグループフィルター式と照合します。 CloudWatch は、グループ基準に一致するトレースのメトリクスを 1 分ごとに発行します。

グループのフィルタ式を更新しても、すでに記録されているデータは変わりません。更新は後続のトレースにのみ適用されます。これにより、新しい式と古い式がマージされたグラフが表示される場合があります。接続されていないグループが 1 つのグラフ内にマージされないようにするには、現在のグループを削除して新しいグループhttps://docs.aws.amazon.com/xray/latest/api/API_CreateGroup.htmlを作成します。

注記

グループの請求は、フィルター式に一致する取得トレースの数に基づきます。詳細については、「AWS X-Ray 料金表」を参照してください。

グループの詳細については、「グループを設定する」を参照してください。

注釈とメタデータ

アプリケーションを計測すると、X-Ray SDK は受信リクエストと送信リクエストに関する情報を記録します。SDK は、使用された AWS リソースとアプリケーション自体に関する情報も記録します。その他の情報を注釈およびメタデータとして、セグメントドキュメントに追加することもできます。注釈とメタデータはトレースレベルで結合されます。これらは、任意のセグメントまたはサブセグメントに追加できます。

アノテーションは、フィルター式 で使用するインデックスが作成されたキーと値のペアです。注釈を使用して、コンソールでトレースをグループ化するため、またはGetTraceSummaries API を呼び出すときに使用するデータを記録します。

X-Ray は、トレースごとに 50 の注釈までインデックスを付けます。

メタデータは、オブジェクトやリストなど、インデックス化されていない任意のタイプの値を持つキーと値のペアです。メタデータを使用してトレースに保存するデータを記録しますが、トレースの検索用に使用する必要はありません。

セグメントまたはサブセグメントの詳細ウィンドウで、 CloudWatch コンソールのトレースの詳細ページ内で注釈とメタデータを表示できます。詳細については、「 でトレースとトレースの詳細を表示する」を参照してくださいX-Ray コンソールの詳細

エラー、障害、および例外

X-Ray は、アプリケーションコードのエラーとダウンストリームサービスによって返されたエラーを追跡します。X-Ray は、リクエストから次のHTTPレスポンスコードを追跡します。

  • Error – クライアントエラー (400 シリーズエラー) は、リクエスト自体にエラーが含まれているため、サーバーがクライアントからのリクエストを理解または処理できなかったことを示します。これらのエラーは、構文エラー、情報不足、または不正なリクエストボディが原因で発生する可能性があります。

  • Fault – サーバー障害 (500 シリーズエラー) は、サーバー自体に問題があるため、サーバーが有効なリクエストを処理できなかったことを示します。これらのエラーは、ソフトウェアやハードウェアの障害、サーバーのリソース制限などの問題が原因で発生する可能性があります。

  • Throttle – スロットリングエラー (429 リクエストが多すぎます) は、クライアントが一定期間にわたってサーバーまたは API に送信するリクエストが多すぎる場合に発生する特定のタイプのクライアントエラーです。

アプリケーションが計測されたリクエストを処理している間に例外が発生した場合、X-Ray SDK は、スタックトレース ID を含む例外の詳細を、可能な場合は記録します。X-Ray コンソールでセグメント詳細の例外を表示できます。