OpenTelemetryインストルメンテーションを使用して、.NETトレースデータとログを接続する 🔗
The Splunk Distribution of OpenTelemetry .NET automatically exports logs enriched with tracing context from any application that uses logging API from:
アプリケーションログは、トレースメタデータでエンリッチされ、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
互換性と必要条件をチェック 🔗
注釈
Automatic log to trace correlation for Microsoft.Extensions.Logging
only works for .NET applications. For .NET Framework use manual correlation. See 手動ログとトレースの相関.
以下が該当します:
Microsoft.Extensions.Logging
version9.0.0
and higher are supportedlog4net
version from2.0.13
to4.0.0
are supportedThe environmental variable
OTEL_DOTNET_AUTO_LOGS_ENABLE_LOG4NET_BRIDGE
needs to be set totrue
ログ相関を有効にする 🔗
インストルメンテーションは、デフォルトで自動ログとトレースの相関をオンにします。
ログのエンリッチメントとエクスポートをオフにする必要がある場合は、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
のように、設定されたリソースディテクターによって追加される属性。
手動ログとトレースの相関 🔗
You can configure logging libraries to include tracing attributes in logs written to existing log destinations.
log4net
🔗
You can modify conversionPattern
in your log4net appender to include tracing attributes in logs written to existing log destinations.
The following properties are set by default for the collection of logging events:
trace_id
span_id
trace_flags
Example on how to configure ConsoleAppender
:
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message span_id=%property{span_id} trace_id=%property{trace_id} trace_flags=%property{trace_flags} test_key=%property{test_key}%newline" />
</layout>
</appender>
NLog
🔗
NLog.DiagnosticSource を使用することができます。詳細は NLog公式ドキュメント を参照してください。
Serilog
🔗
Serilog.Enrichers.Span のような利用可能なエンリッチャーの1つを使用するか、独自の エンリッシャー を作成して、ログイベントのプロパティとしてトレースコンテキストを追加することができます。