ASP.NET Core 11 がネイティブ OpenTelemetry トレーシングを出荷: 追加の NuGet パッケージを捨てよう
.NET 11 Preview 2 の ASP.NET Core は OpenTelemetry セマンティック属性を HTTP サーバーアクティビティに直接追加し、OpenTelemetry.Instrumentation.AspNetCore を不要にします。
トレースをエクスポートするすべての ASP.NET Core プロジェクトの .csproj には同じ行があります。OpenTelemetry.Instrumentation.AspNetCore への参照です。このパッケージはフレームワークの Activity ソースをサブスクライブし、各 span にエクスポーターが期待するセマンティック属性をスタンプします。http.request.method、url.path、http.response.status_code、server.address などです。
.NET 11 Preview 2 からは、フレームワーク自身がその仕事を行います。ASP.NET Core は今や標準の OpenTelemetry セマンティック規約属性を HTTP サーバーアクティビティに直接設定するので、ベースラインのトレーシングデータを収集するために別途のインストルメンテーションライブラリは必要ありません。
フレームワークが提供するようになったもの
.NET 11 Preview 2 でリクエストが Kestrel に到達すると、組み込みのミドルウェアはインストルメンテーションパッケージが追加していたのと同じ属性を書き込みます。
http.request.methodurl.pathとurl.schemehttp.response.status_codeserver.addressとserver.portnetwork.protocol.version
これらは、すべての OTLP 互換バックエンドがダッシュボードとアラートのために頼っている HTTP サーバーセマンティック規約 です。
ビフォーアフター
HTTP トレースを取得するための典型的な .NET 10 のセットアップはこうでした。
builder.Services.AddOpenTelemetry()
.WithTracing(tracing =>
{
tracing
.AddAspNetCoreInstrumentation() // requires the NuGet package
.AddOtlpExporter();
});
.NET 11 では、代わりに組み込みのアクティビティソースをサブスクライブします。
builder.Services.AddOpenTelemetry()
.WithTracing(tracing =>
{
tracing
.AddSource("Microsoft.AspNetCore") // no extra package needed
.AddOtlpExporter();
});
OpenTelemetry.Instrumentation.AspNetCore パッケージはなくなったわけではありません。エンリッチメントコールバックや高度なフィルタリングが必要なチームのために依然存在します。しかし、90 % のプロジェクトが必要とするベースライン属性は今やフレームワークに焼き込まれています。
これがなぜ重要か
パッケージが少ないほど依存グラフが小さくなり、restore 時間が速くなり、メジャーバージョンアップグレード中に同期を保つものが 1 つ減ります。また、NativeAOT で公開された ASP.NET Core アプリが、reflection を多用するインストルメンテーションコードを引き込むことなく標準のトレースを取得することも意味します。
すでにインストルメンテーションパッケージを使用していても、何も壊れません。フレームワーク属性とパッケージ属性は同じ Activity 上できれいにマージされます。準備ができたらパッケージ参照を削除し、ダッシュボードをテストして、先に進めます。
ASP.NET Core .NET 11 Preview 2 の完全なリリースノート は、Blazor SSR TempData サポートや新しい Web Worker プロジェクトテンプレートを含む残りの変更をカバーしています。