AWS X-Ray
開発者ガイド

X-Ray SDK for .NET を使用して着信 HTTP リクエストを計測する

X-Ray SDK を使用して、アプリケーションが Amazon EC2、AWS Elastic Beanstalk、または Amazon ECS の EC2 インスタンスで処理する受信 HTTP リクエストをトレースできます。

メッセージハンドラーを使用して受信 HTTP リクエストを計測します。X-Ray メッセージハンドラーをアプリケーションに追加すると、サンプリングされた各リクエストに X-Ray SDK for .NET によってセグメントが作成されます。このセグメントには、時間、メソッド、HTTP リクエストの処理などが含まれます。追加の計測により、このセグメントでサブセグメントが作成されます。

注記

AWS Lambda 関数の場合、Lambda はサンプリングされたリクエストごとにセグメントを作成します。詳細については、「AWS Lambda および AWS X-Ray」を参照してください。

Each segment has a name that identifies your application in the service map. The segment can be named statically, or you can configure the SDK to name it dynamically based on the host header in the incoming request. Dynamic naming lets you group traces based on the domain name in the request, and apply a default name if the name doesn't match an expected pattern (for example, if the host header is forged).

転送されたリクエスト

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

メッセージハンドラーは、次の情報が含まれる http ブロックを使用して、各受信リクエスト用にセグメントを作成します。

  • HTTP メソッド – GET、POST、PUT、DELETE、その他。

  • クライアントアドレス – リクエストを送信するクライアントの IP アドレス。

  • レスポンスコード – 完了したリクエストの HTTP レスポンスコード。

  • タイミング – 開始時間 (リクエストが受信された時間) および終了時間 (レスポンスが送信された時間)。

  • ユーザーエージェント — リクエストから user-agent を取得します。

  • コンテンツの長さ — レスポンスからの content-length

受信リクエストの計測 (.NET)

アプリケーションによって処理されるリクエストを計測するには、RegisterXRay ファイルの Init メソッドで global.asax を呼び出します。

例 global.asax - メッセージハンドラー

using System.Web.Http; Amazon.XRay.Recorder.Handlers.AspNet; の使用 namespace SampleEBWebApplication { public class MvcApplication : System.Web.HttpApplication { public override void Init() { base.Init(); AWSXRayASPNET.RegisterXRay(this, "MyApp"); } } }

受信リクエストの計測 (.NET Core)

アプリケーションによって処理されるリクエストを計測するには、UseExceptionHandler クラスの UseXRay メソッドで UseStaticFilesConfigure、および Startup メソッドを呼び出します。

例 Startup.cs

using Microsoft.AspNetCore.Builder; public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app.UseExceptionHandler("/Error"); app.UseXRay("MyApp"); app.UseStaticFiles(); app.UseMVC(); }

必ず UseExceptionHandler の後に UseXRay を呼び出して例外を記録します。他のミドルウェアを使用する場合は、UseXRay を呼び出した後で有効にします。

この UseXRay メソッドは、2 番目の引数として設定オブジェクトを受け取ることもできます。

app.UseXRay("MyApp", configuration);

セグメント命名ルールの設定

AWS X-Ray はサービス名を使用してアプリケーションを識別し、アプリケーションが使用する他のアプリケーション、データベース、外部 API、および AWS リソースからそのアプリケーションを区別します。X-Ray SDK が受信リクエストのセグメントを生成するときに、アプリケーションのサービス名をセグメントの name フィールドに記録します。

X-Ray SDK は HTTP リクエストヘッダーのホスト名に合わせてセグメントを命名できます。ただし、このヘッダーは偽造されている可能性があり、その場合はサービスマップで予期しないノードが発生することがあります。SDK が、偽造されたホストヘッダーを持つリクエストによりセグメントに正しくない名前を付けないようにするには、受信リクエストのデフォルト名を指定する必要があります。

アプリケーションが複数のドメインのリクエストに対応する場合、動的な命名ルールを使用してセグメント名にこれを反映するよう SDK を設定できます。動的な命名ルールにより、SDK は予期されるパターンに一致するリクエストにホスト名を使用し、一致しないリクエストにはデフォルト名を適用できます。

たとえば、3 つのサブドメイン (www.example.comapi.example.comstatic.example.com) へのリクエストに対応する 1 つのアプリケーションがあるとします。動的命名ルールとパターン *.example.com を使用して、異なる名前を持つ各サブドメインのセグメントを識別し、それによりサービスマップで 3 つのサービスノードが作成されます。アプリケーションが、パターンに一致しないホスト名のリクエストを受け取った場合は、指定したフォールバック名を持つ 4 番目のノードがサービスマップに表示されます。

すべてのリクエストセグメントに対して同じ名前を使用するには、前のセクションで示すとおり、メッセージハンドラを初期化するときに、アプリケーションの名前を指定します。これは、FixedSegmentNamingStrategy を作成して、RegisterXRay メソッドに渡すのと同じ効果があります。

AWSXRayASPNET.RegisterXRay(this, new FixedSegmentNamingStrategy("MyApp"));

注記

コードで定義したデフォルトのサービス名は、AWS_XRAY_TRACING_NAME 環境変数で上書きできます。

動的な命名戦略は、ホスト名と一致するようパターンを定義し、HTTP リクエストのホスト名がパターンと一致しない場合はデフォルトの名前を使用します。動的にセグメントに命名するには、DynamicSegmentNamingStrategy を作成して、RegisterXRay メソッドに渡します。

AWSXRayASPNET.RegisterXRay(this, new DynamicSegmentNamingStrategy("MyApp", "*.example.com"));