とは何ですか AWS X-Ray? - AWS X-Ray

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

とは何ですか AWS X-Ray?

AWS X-Ray は、アプリケーションが処理するリクエストに関するデータを収集し、そのデータを表示、フィルタリング、分析して問題点や最適化の機会を特定できるツールを提供するサービスです。アプリケーションへのリクエストを追跡すると、リクエストとレスポンスだけでなく、 AWS アプリケーションがダウンストリームのリソース、マイクロサービス、データベース、Web API に対して行う呼び出しに関する詳細情報も確認できます。


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

AWS X-Ray 既に X-Ray と統合されているアプリケーションの用途に加えて、 AWS のサービス アプリケーションからのトレースを受信します。アプリケーションをインストルメント化するには、アプリケーション内の受信および送信されるリクエストやその他のイベントのトレースデータと、各リクエストに関するメタデータを送信する必要があります。多くの計測シナリオで必要となるのは、設定の変更のみです。たとえば、Java アプリケーションが行うすべての受信 HTTP AWS のサービス リクエストとダウンストリーム呼び出しをインストゥルメントできます。X-Ray トレースシング用アプリケーションを計測するために使用できる SDK、エージェント、およびツールがいくつかあります。詳細は、アプリケーションの計測 を参照してください。

AWS のサービス X-Ray と統合されているものは、受信リクエストにトレースヘッダーを追加したり、X-Ray にトレースデータを送信したり、X-Ray デーモンを実行したりできます。たとえば、リクエストに関するトレースデータを Lambda AWS Lambda 関数に送信したり、ワーカーで X-Ray デーモンを実行したりして、X-Ray SDK をより使いやすくすることができます。


      X-Ray SDK の動作の方法

各クライアントSDKは、トレースデータを直接X-Rayに送らずに、UDPトラフィックをリッスンしているデーモンプロセスにJSONセグメントドキュメントを送ります。 X-Ray デーモン は、セグメントをキューにバッファリングし、バッチでX-Rayにアップロードします。このデーモンは Linux、Windows、macOS で利用でき、とプラットフォームに含まれています。 AWS Elastic Beanstalk AWS Lambda

X-Ray は、 AWS クラウドアプリケーションを支えるリソースからのトレースデータを使用して、詳細なトレースマップを生成します。トレースマップには、フロントエンドサービスがリクエストを処理してデータを保持するために呼び出すクライアント、フロントエンドサービス、バックエンドサービスが表示されます。トレースマップを使用すると、ボトルネック、レイテンシースパイク、その他の問題を特定して解決し、アプリケーションのパフォーマンスを向上できます。


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

X-Ray の使用開始

始めるには AWS X-Ray:

  • サンプルアプリケーションを起動します。これはトレースデータを生成するために既に計測済みです。ほんの数分で、サンプルアプリを起動し、トラフィックを生成し、セグメントを X-Ray に送信し、 AWS Management Consoleトレースマップとトレースをで表示できます。

  • X-Ray SDK や AWS Distro を使用して X-Ray OpenTelemetry にトレースデータを送信するなど、アプリケーションを計測する方法を学びましょう

  • 受信リクエストのサンプリングとヘッダーの追加、X-Ray デーモンの実行、X-Ray へのトレースデータの自動送信など、X-Ray に統合された他の AWS のサービス について検討します。

  • X-Ray API を使用すると、 AWS SDK 経由で AWS Command Line Interface、または HTTPS 経由で直接 X-Ray のすべての機能にアクセスできます。

AWS X-Ray コンセプト

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

セグメント

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

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

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

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

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

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


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

X-Ray SDK は、要求ヘッダーと応答ヘッダー、アプリケーション内のコード、 AWS および実行対象となるリソースに関するメタデータから情報を収集します。受信リクエスト、ダウンストリームリクエスト、 AWS SDK クライアントを計測するようにアプリケーション設定またはコードを変更して、収集するデータを選択します。

転送されたリクエスト

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

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

サブセグメント

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


        サブセグメントに含まれる詳細情報

Amazon DynamoDB のように独自のセグメントを送信しないサービスの場合、X-Ray はサブセグメントを使用して推測されたセグメントとトレースマップ上のダウンストリームノードを生成します。これにより、トレースをサポートしていない場合でも、外部の場合でも、すべてのダウンストリーム依存関係を表示することができます。

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

たとえば、インストルメント化された AWS SDK クライアントで DynamoDB を呼び出すと、X-Ray SDK はその呼び出しのサブセグメントを記録します。DynamoDB はセグメントを送信しないので、トレースの推測セグメント、サービスグラフの DynamoDB ノード、サービスと DynamoDB の間のエッジにはサブセグメントの情報が含まれます。


        実装されたアプリケーションと DynamoDB の間のエッジ。

実装されたアプリケーションを使用して実装された別のサービスを呼び出すと、ダウンストリームサービスは、サブセグメントに記録されたアップストリームサービスと同じ呼び出しのビューを記録するために、独自のセグメントを送信します。サービスグラフでは、両方のサービスのノードに、それらのサービスのセグメントからのタイミング情報とエラー情報が含まれています。その間には、アップストリームサービスのサブセグメントの情報が含まれています。


        他の計測アプリケーションを呼び出す計測アプリケーション。

ダウンストリームサービスは要求の処理を開始および終了した時点を正確に記録し、アップストリームサービスは要求が 2 つのサービス間を移動した時間を含めて往復遅延を記録するため、両方の視点が役立ちます。

サービスグラフ

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

サービス名

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

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


        トレースマップ

分散アプリケーションの場合、X-Ray は、同一のトレース ID を含むリクエストを処理するすべてのサービスのノードを、単一のサービスグラフに組み合わせます。リクエストがヒットする最初のサービスによって、フロントエンドと呼び出すサービスの間で伝達される「トレースヘッダー」が追加されます。

たとえば、Scorekeep は、マイクロサービス ( AWS Lambda 関数) を呼び出し、Node.js ライブラリを使用してランダム名を生成するウェブ API を実行します。X-Ray SDK for Java はトレース ID を生成し、Lambda への呼び出しにそれを含めます。Lambda はトレースデータを送信し、トレース ID を関数に渡します。また、X-Ray SDK for Node.js は、トレース ID を使用してデータを送信します。その結果、API、Lambda サービス、および Lambda 関数のノードはすべて、トレースマップ上で別々の、しかし接続されたノードとして表示されます。

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

トレース

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


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

X-Ray トレースの請求方法については、「AWS X-Ray の料金」をご覧ください。トレースデータは 30 日間保持されます。

サンプリング

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

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

例えば、サンプリングを無効にして、状態を変更したり、ユーザーやトランザクションを処理したりする呼び出しのすべての要求をトレースすることができます。バックグラウンドポーリング、ヘルスチェック、接続保守などの大量の読み取り専用呼び出しでは、低いレートでサンプリングを行っても、問題が発生した場合にも十分なデータを得ることができます。

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

トレースヘッダー

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

LineageLambda AWS のサービス などによって処理メカニズムの一部としてトレースヘッダーに追加される場合があり、直接使用しないでください。

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

フィルタ式

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


        個別のリクエストのトレースを掘り下げる

グループ

フィルタ式が拡張され、X-Ray でもグループ機能がサポートされます。フィルタ式を使用すると、グループへのトレースを受け入れる基準を定義できます。

グループを名前または Amazon リソースネーム (ARN) で呼び出して、独自のサービスグラフ、トレースサマリー、Amazon CloudWatch メトリクスを生成できます。グループの作成後、着信トレースは、X-Ray サービスに格納されるときにグループのフィルタ式と照合されます。各条件に一致するトレース数のメトリックスが 1 分ごとに公開されます。 CloudWatch

グループのフィルタ式を更新しても、すでに記録されているデータは変わりません。更新は後続のトレースにのみ適用されます。これにより、新しい式と古い式がマージされたグラフが表示される場合があります。これを回避するには、現在のグループを削除し、新しいグループを作成します。

注記

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

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

注釈とメタデータ

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

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

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

メタデータは、オブジェクトとリストを含む、任意のタイプの値を持つことができるキーと値のペアですが、フィルタ式に使用するためにインデックスは作成されません。メタデータを使用してトレースに保存するデータを記録しますが、トレースの検索用に使用する必要はありません。

アノテーションとメタデータは、コンソールのトレース詳細ページ内のセグメントまたはサブセグメントの詳細ウィンドウで確認できます。 CloudWatch


        注釈とメタデータは、コンソールのセグメントまたはサブセグメントの詳細で確認できます。 CloudWatch

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

X-Ray は、アプリケーションコードで発生するエラーと、ダウンストリームサービスから返されるエラーをトレースします。エラーは次のように分類されます。

  • Error – クライアントエラー (400 系のエラー)

  • Fault – サーバー障害 (500 系のエラー)

  • Throttle – スロットリングエラー (429 Too Many Requests)

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