.NET Framework の計装設定
OpenTelemetry は .NET と .NET Framework(古い Windows ベースの .NET 実装)の両方をサポートしています。
すでにモダンなクロスプラットフォーム版の .NET を使用している場合は、この記事をスキップできます。
ASP.NET の初期化
ASP.NET の初期化は、ASP.NET Core とは少し異なります。
まず、以下の NuGet パッケージをインストールしてください。
次に、Web.Config ファイルを変更して、必要な HttpModule を追加します。
<system.webServer>
<modules>
<add
name="TelemetryHttpModule"
type="OpenTelemetry.Instrumentation.AspNet.TelemetryHttpModule,
OpenTelemetry.Instrumentation.AspNet.TelemetryHttpModule"
preCondition="integratedMode,managedHandler" />
</modules>
</system.webServer>
最後に、Global.asax.cs ファイルで ASP.NET の計装を他の OpenTelemetry の初期化とともに設定します。
using OpenTelemetry;
using OpenTelemetry.Trace;
public class WebApiApplication : HttpApplication
{
private TracerProvider _tracerProvider;
protected void Application_Start()
{
_tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddAspNetInstrumentation()
// エクスポーターの追加やリソースの設定などその他の構成
.AddConsoleExporter()
.AddSource("my-service-name")
.SetResourceBuilder(
ResourceBuilder.CreateDefault()
.AddService(serviceName: "my-service-name", serviceVersion: "1.0.0"))
.Build();
}
protected void Application_End()
{
_tracerProvider?.Dispose();
}
}
ASP.NET の高度な設定
ASP.NET の計装は、デフォルトの動作を変更するように設定できます。
フィルター
ASP.NET の計装は、デフォルトですべての受信 HTTP リクエストを収集します。
ただし、AspNetInstrumentationOptions の Filter メソッドを使用して、受信リクエストをフィルタリングできます。
これは LINQ の Where 句と同様に機能し、条件に一致するリクエストのみが収集されます。
以下のコードスニペットは、Filter を使用して GET リクエストのみを許可する方法を示しています。
this.tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddAspNetInstrumentation(
(options) => options.Filter =
(httpContext) =>
{
// HTTP GET リクエストに関するテレメトリーのみを収集する
return httpContext.Request.HttpMethod.Equals("GET");
})
.Build();
フィルタリングは早い段階で行われ、データが収集された後に行われるサンプリングとは異なります。 フィルタリングは、そもそも何が収集されるかを制限します。
エンリッチ
OpenTelemetry が生成するすべての Activity にデータを追加したい場合は、Enrich メソッドを使用できます。
Enrich アクションは activity.IsAllDataRequested が true の場合にのみ呼び出されます。
作成された Activity、イベント名、および生のオブジェクトが含まれます。
以下のコードスニペットは、Enrich を使用して追加のタグを付与する方法を示しています。
this.tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddAspNetInstrumentation((options) => options.Enrich
= (activity, eventName, rawObject) =>
{
if (eventName.Equals("OnStartActivity"))
{
if (rawObject is HttpRequest httpRequest)
{
activity?.SetTag("physicalPath", httpRequest.PhysicalPath);
}
}
else if (eventName.Equals("OnStopActivity"))
{
if (rawObject is HttpResponse httpResponse)
{
activity?.SetTag("responseType", httpResponse.ContentType);
}
}
})
.Build();
トレースデータへのアノテーションの一般的な方法については、Activity にタグを追加を参照してください。
RecordException
ASP.NET の計装は、未処理の例外がスローされた場合、該当する Activity のステータスを自動的に Error に設定します。
RecordException プロパティを true に設定することで、例外を ActivityEvent として Activity 自体に保存することもできます。
次のステップ
計装ライブラリによってオブザーバビリティが自動的に生成されるようになったら、カスタムテレメトリーデータを収集するために手動計装を追加することもできます。
また、テレメトリーデータを1つ以上のテレメトリーバックエンドにエクスポートするために、適切なエクスポーターを設定することも必要です。
現在ベータ版の .NET の自動計装も確認できます。
フィードバック
このページは役に立ちましたか?
Thank you. Your feedback is appreciated!
Please let us know how we can improve this page. Your feedback is appreciated!