OpenTelemetryインストルメンテーションを使用して、.NETトレースデータとログを接続する
Splunk Distribution of OpenTelemetry .NETが提供するログとトレース間の自動相関。
Splunk Distribution of OpenTelemetry .NET は、Microsoft.Extensions.Logging のロギング API をロギングに使用するアプリケーションから、トレースコンテキストが強化されたログを自動的にエクスポートします。
アプリケーションログは、トレースメタデータでエンリッチされ、OTLP フォーマットで OpenTelemetry Collector のローカルインスタンスにエクスポートされます。
以下は、サンプル・コンソール・アプリケーションが生成するログの例です:
2024-02-15 15:23:17 2024-02-15T13:23:17.704Z info ResourceLog #0
2024-02-15 15:23:17 Resource SchemaURL:
2024-02-15 15:23:17 Resource attributes:
2024-02-15 15:23:17 -> splunk.distro.version: Str(1.4.0)
2024-02-15 15:23:17 -> container.id: Str(c894cdb646a29616b5f713195cf810be898ca99c311cac8d9d25d8561dd6964b)
2024-02-15 15:23:17 -> telemetry.distro.name: Str(splunk-otel-dotnet)
2024-02-15 15:23:17 -> telemetry.distro.version: Str(1.4.0)
2024-02-15 15:23:17 -> telemetry.sdk.name: Str(opentelemetry)
2024-02-15 15:23:17 -> telemetry.sdk.language: Str(dotnet)
2024-02-15 15:23:17 -> telemetry.sdk.version: Str(1.7.0)
2024-02-15 15:23:17 -> service.name: Str(Example.LogTraceCorrelation.Console)
2024-02-15 15:23:17 -> deployment.environment: Str(dev)
2024-02-15 15:23:17 -> service.version: Str(1.0.0)
2024-02-15 15:23:17 ScopeLogs #0
2024-02-15 15:23:17 ScopeLogs SchemaURL:
2024-02-15 15:23:17 InstrumentationScope
2024-02-15 15:23:17 LogRecord #0
2024-02-15 15:23:17 ObservedTimestamp: 2024-02-15 13:23:13.1358363 +0000 UTC
2024-02-15 15:23:17 Timestamp: 2024-02-15 13:23:13.1358363 +0000 UTC
2024-02-15 15:23:17 SeverityText: Information
2024-02-15 15:23:17 SeverityNumber: Info(9)
2024-02-15 15:23:17 Body: Str(Hello from {activity})
2024-02-15 15:23:17 Attributes:
2024-02-15 15:23:17 -> activity: Str(LogWrappingActivity)
2024-02-15 15:23:17 Trace ID: 17512c0247942df04fb30e6090eacb2c
2024-02-15 15:23:17 Span ID: dc281b062178e72f
2024-02-15 15:23:17 Flags: 1
互換性と必要条件をチェック
Microsoft.Extensions.Logging バージョン 8.0.0 以上がサポートされます。
ログ相関を有効にする
インストルメンテーションは、デフォルトで自動ログとトレースの相関をオンにします。
ログのエンリッチメントとエクスポートをオフにする必要がある場合は、OTEL_DOTNET_AUTO_LOGS_ENABLED 環境変数の値を false に設定してください。
ログ文のトレースメタデータ
アクティブなアクティビティの範囲内でエクスポートされた個々のログレコードには、以下のトレースコンテキスト情報が含まれます:
-
トレース識別子
-
スパン識別子
-
トレースフラグ
アプリケーションによって生成されたログは、常に以下の OpenTelemetry リソース属性のセットを持ちます。
-
telemetry.sdk.nameと一定の値のopentelemetry -
telemetry.sdk.languageと一定の値のdotnet -
telemetry.sdk.versionと現在のバージョンのOpenTelemetry .NET SDK -
telemetry.distro.nameと一定の値のsplunk-otel-dotnet -
telemetry.distro.versionと現在のバージョンのSplunk Distribution of OpenTelemetry .NET -
splunk.distro.version現在のバージョンのSplunk Distribution of OpenTelemetry .NET(非推奨属性)
さらに、インストルメンテーションは以下の属性を追加します:
-
service.name環境変数OTEL_SERVICE_NAMEで定義されています。 -
OTEL_RESOURCE_ATTRIBUTES環境変数を使って設定されたすべての属性 -
container.idのように、設定されたリソースディテクターによって追加される属性。
手動ログとトレースの相関
既存のログ宛先に書き込まれたログにトレース属性を含めるように、ロギングライブラリを設定することができます。
NLog
NLog NLog NLog.DiagnosticSource を使用できます。詳細については、「NLog official documentation」を参照してください。
Serilog
Serilog Serilog Serilog.Enrichers.Span のような利用可能なエンリッチャーの 1 つを使用するか、独自のエンリッチャーを作成して、ログイベントのプロパティとしてトレースコンテキストを追加することができます。