開発者は、AWS X-Ray を使用して、本番環境や分散アプリケーション (マイクロサービスアーキテクチャを使用して構築されたアプリケーションなど) を分析およびデバッグできます。X-Ray により、アプリケーションや基盤となるサービスの動作を把握できます。それにより、パフォーマンスの問題やエラーの根本原因を確認し、トラブルシューティングすることができます。X-Ray では、アプリケーション内で転送されるリクエストがエンドツーエンドで表示され、アプリケーションの基盤となるコンポーネントのマップも表示されます。X-Ray を使用すると、開発中か本番環境かにかかわらず、シンプルな 3 層アプリケーションから数千のサービスで構成される複雑なマイクロサービスアプリケーションまで、さまざまなアプリケーションを分析できます。
現在、分散アプリケーションを構築して実行する際、アプリケーションを構成するさまざまなコンポーネントを経由するリクエストを追跡するには、サービスごと、またはリソースごとのプロセスに頼る必要があります。アプリケーションを実行する、またはアプリケーションで使用されるフレームワーク、サービス、リソースによってログの形式やストレージメディアが異なることから、この問題はさらに複雑化しています。そのため、各種のデータ要素を関連付け、エンドユーザーやサービスの下でリクエストが発生してからアプリケーションによってレスポンスが返されるまでの全体像を把握することが難しくなっています。X-Ray では、サービスやリソース中心ではない、ユーザーを中心としたモデルを通して、アプリケーションに対するリクエストに関連したデータが収集されます。このモデルにより、ユーザーを中心とした視点で、サービスやリソースを経由するリクエストを把握することができます。X-Ray によってデータの関連付けと集計が実行されることで、お客様はアプリケーションのエンドユーザー環境を向上させることに注力できます。
X-Ray を使用すれば、以下の作業を簡単に行えます。
X-Ray の追跡は、同じ追跡 ID を持つデータポイントの集合体です。たとえば、あるクライアントからアプリケーションに対するリクエストが作成されると、それに対して一意の追跡 ID が割り当てられます。このリクエストがアプリケーション内の複数のサービスを経由すると、リクエストに関する情報は、この一意の追跡 ID によってサービスから X-Ray に中継されます。アプリケーション内のサービスから X-Ray に中継される各情報はセグメントであり、追跡はセグメントの集合体です。
X-Ray のセグメントは、分散アプリケーションの 1 つのコンポーネント (認証サービスなど) に関するすべてのデータポイントをカプセル化したものです。セグメントには、システム定義のデータとユーザー定義のデータが注釈の形式で含まれています。各セグメントは、サービスからのリモートコールを表す 1 つ以上のサブセグメントで構成されます。たとえば、リクエストに応じてアプリケーションからデータベースが呼び出されると、そのリクエストに対して、データベース呼び出しとその結果を表すサブセグメントを伴うセグメントが作成されます。サブセグメントには、クエリ、使用されたテーブル、タイムスタンプ、エラーステータスなどのデータが含まれます。
X-Ray の注釈は、セグメントに関連付けられたシステム定義のデータまたはユーザー定義のデータです。1 つのセグメントに複数の注釈が含まれる場合もあります。システム定義の注釈には、AWS のサービスによってセグメントに追加されたデータが含まれています。一方、ユーザー定義の注釈は、開発者がセグメントに追加したメタデータです。例えば、アプリケーションによって自動的に作成されたセグメントには、AWS のサービス呼び出しに対するリージョンデータが自動的に挿入されます。一方、AWS 以外のサービスに対する呼び出しの場合は、リージョンデータの追加を選択することができます。
X-Ray のエラーは、エラーが返された呼び出しのあるセグメントに関連付けられたシステム注釈です。エラーには、ソースファイルと関連付けるためのエラーメッセージ、スタックトレースやその他の追加情報 (バージョンやコミット ID など) が含まれます。
パフォーマンスやコスト効率の観点から、X-Ray ではアプリケーションに送信されるリクエストすべてのデータが収集されるわけではありません。代わりに、統計的に有意なリクエスト数のデータが収集されます。X-Ray ではデータの完全性が保証されないため、監査やコンプライアンスのツールとして使用することはできません。
X-Ray デーモンはトレースを収集し、集約、分析、保存のために X-Ray サービスに送信します。デーモンを使用すると、API を直接使用する代わりに X-Ray サービスにデータを簡単に送信できます。
X-Ray を使い始めるには、アプリケーションに X-Ray 言語 SDK を組み込み、X-Ray デーモンをインストールします。詳細については、X-Ray ユーザーガイドを参照してください。
X-Ray では、あらゆるサイズの分散アプリケーションを使用して、同期リクエストと非同期イベントの両方を追跡してデバッグすることができます。例えば、ウェブアプリケーションに対するウェブリクエストや Amazon SQS キューを使用した非同期イベントを追跡できます。
X-Ray は、EC2、ECS、Lambda、Amazon SQS、Amazon SNS、Elastic Beanstalk で実行しているアプリケーションで使用できます。また、X-Ray SDK では、AWS SDK を使用して、AWS のサービスに対する API コールのメタデータが自動的に取得されます。さらに、X-Ray SDK には、MySQL ドライバーおよび PostgreSQL ドライバー用のアドオンも用意されています。
Elastic Beanstalk を使用している場合は、言語固有の X-Ray ライブラリをアプリケーションコードに含める必要があります。EC2 や ECS など、他の AWS サービスで実行されているアプリケーションでは、X-Ray デーモンをインストールし、アプリケーションコードをインストルメントする必要があります。
はい。X-Ray にはリクエストデータの取り込み、追跡のクエリ、サービスの設定を行うための API セットが用意されています。X-Ray API を使用すれば、X-Ray で用意されているものに加えて、分析と可視化のためのアプリケーションを構築することができます。
はい。X-Ray はすべての API コールを管理イベントとして記録します。また、コールは証跡にもデータイベントとして記録されます。これには、PutTraceSegments や GetTimeSeriesServiceStatistics などの API が含まれます。データイベントはデフォルトで記録されません。データイベントを記録するには、それらを収集するように CloudTrail の証跡またはイベントデータストアを設定する必要があります。
詳細については、地域別製品およびサービスを参照してください。
はい。X-Ray を使用すると、複数のリージョンにまたがるアプリケーションやサービスを経由するリクエストを追跡することができます。X-Ray のデータは処理されたリージョンのローカルに保存されますが、十分な情報に基づき、クライアントアプリケーションによってデータが組み合わせられ、グローバルな追跡状況が表示されます。AWS のサービスに関するリージョンの注釈は自動的に追加されますが、リージョン間サポートを利用するには、リージョンの注釈を追加するようにカスタムサービスを設定する必要があります。
X-Ray に送信される追跡データは、サービスで受信されてから原則として 30 秒以内に取得、フィルタリングできます。
X-Ray では、直近 30 日間の追跡データが保存されます。したがって、過去 30 日間の追跡データに対してクエリを実行できます。
X-Ray ではできる限り完全な追跡情報を提示するよう処理が実行されます。しかし、状況によっては (接続の問題、セグメント受信の遅れなど)、X-Ray API からの追跡情報が部分的になる可能性があります。そのような場合、X-Ray では、追跡に不完全または部分的であることを示すタグが付けられます。
はい。X-Ray デーモンは、実行中のアカウントとは別のアカウントにデータを公開する役割を担うことができます。そのため、アプリケーションのさまざまなコンポーネントからのデータを 1 つの中心的なアカウントにパブリッシュできます。