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
互換性と必要条件をチェック 🔗
注釈
ログからトレースへの自動相関は、.NETアプリケーションでのみ機能します。.NET Frameworkの場合は、手動相関を使用してください。手動ログとトレースの相関 を参照してください。
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.DiagnosticSource を使用することができます。詳細は NLog公式ドキュメント を参照してください。
Serilog
🔗
Serilog.Enrichers.Span のような利用可能なエンリッチャーの1つを使用するか、独自の エンリッシャー を作成して、ログイベントのプロパティとしてトレースコンテキストを追加することができます。