注意
SignalFx Instrumentation for .NETは、2024年2月21日をもって非推奨となり、2025年2月21日にサポート終了となります。それまでは、重要なセキュリティ修正とバグ修正のみが提供されます。それ以降は、ライブラリはアーカイブされ、保守されなくなります。
新規に .NET エコシステムをインストルメンテーションするお客様は、Splunk Distribution of OpenTelemetry .NET をご利用ください。既存のお客様は、同様の機能を提供する Splunk Distribution of OpenTelemetry .NET への移行をご検討ください。移行方法については、SignalFx .NET Instrumentationからの移行 を参照してください。
Splunk Observability Cloud で .NET トレースデータとログを接続する 🔗
SignalFx Instrumentation for .NET が自動的に提供するトレース属性を含めるように、ロギングライブラリを設定できます。メタデータを使用して、トレースとログイベントを関連付け、Splunk でログを探索します。
互換性と必要条件をチェック 🔗
SignalFx Instrumentation は、以下のロギング・ライブラリをサポートしています:
ライブラリ |
バージョン |
レイアウト |
---|---|---|
ILogger |
2.5.0 ~ 6.x.x |
|
Log4Net |
1.0.0 ~2.x.x |
|
NLog |
1.0.0.505~ 4.x.x |
|
Serilog |
1.4.0 ~ 2.x.x |
|
ログ相関を有効にする 🔗
ログの相関を有効にするには、インストルメンテーションされたアプリケーションを実行する前に、SIGNALFX_LOGS_INJECTION
環境変数を true
に設定します。
ログ文にトレースメタデータを含める 🔗
SignalFx Instrumentation for .NET は、ロギング・ライブラリに以下の属性を提供します:
trace_id
span_id
service.name
環境変数SIGNALFX_SERVICE_NAME
で定義されています。service.version
環境変数SIGNALFX_VERSION
で定義されています。deployment.environment
環境変数SIGNALFX_ENV
で定義されています。
ロギングライブラリがJSONを使用する場合、トレース・ライブラリは自動的にデータ注入を処理します。
ロガーが未加工形式を使用する場合、トレース メタデータを含めるようにロガーを設定する必要があります。以下のセクションは、サポートされているロガーにトレース メタデータを含めるように設定する方法を示しています。
Log4Net 🔗
SerializedLayout
レイアウトを使用する場合、properties メンバを追加することで、すべてのコンテキスト・プロパティを追加できます。例:
<layout type='log4net.Layout.SerializedLayout, log4net.Ext.Json'>
<!-- existing configuration -->
<member value='properties'/> <!-- addition -->
</layout>
明示的にコンテキスト・フィールドを追加することもできます。例:
<layout type='log4net.Layout.SerializedLayout, log4net.Ext.Json'>
<!-- existing configuration -->
<member value='trace_id' />
<member value='span_id' />
<member value='service.name' />
<member value='service.version' />
<member value='deployment.environment' />
</layout>
PatternLayout
レイアウトを使用する場合は、コンテキスト・フィールドを手動で追加してください。値は引用符で囲む必要があります。例:
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %level %logger {trace_id="%property{trace_id}", span_id="%property{span_id}", service.name="%property{service.name}", service.version="%property{service.version}", deployment.environment="%property{deployment.environment}"} - %message%newline" />
</layout>
NLog 🔗
JsonLayout
レイアウトとNLogバージョン4.4.10以降を使用する場合、includeMdlc
属性を true
に設定することで、すべてのコンテキスト・プロパティを追加することができます。例:
<layout xsi:type="JsonLayout" includeMdlc="true"> <!-- includeMdlc property available in NLog 4.4.10+ -->
<!-- existing configuration -->
</layout>
明示的にコンテキスト・フィールドを追加することもできます。例:
<layout xsi:type="JsonLayout">
<!-- existing configuration -->
<attribute name="trace_id" layout="${mdc:item=trace_id}"/>
<attribute name="span_id" layout="${mdc:item=span_id}"/>
<attribute name="service.name" layout="${mdc:item=service.name}"/>
<attribute name="service.version" layout="${mdc:item=service.version}"/>
<attribute name="deployment.environment" layout="${mdc:item=deployment.environment}"/>
</layout>
カスタムレイアウトを使用する場合は、コンテキストフィールドを手動で追加してください。値は引用符で囲む必要があります。例:
<target
// existing configuration
layout="${longdate}|${uppercase:${level}}|${logger}|{trace_id="${mdc:item=trace_id}",span_id="${mdc:item=span_id}",service.name="${mdc:item=service.name}",service.version="${mdc:item=service.version}",deployment.environment="${mdc:item=deployment.environment}"}|${message}"
/>
Serilog 🔗
注入したいトレースコンテキストを抽出するには、ログコンテキストを使用して LoggerConfiguration
インスタンスをエンリッチします:
var loggerConfiguration = new LoggerConfiguration()
.Enrich.FromLogContext() // addition
出力テンプレートを利用する際には、{Properties}
プレースホルダを用いてすべてのコンテキストプロパティを印字するか、またはコンテキストフィールドを手動で追加することができます。
コンテキスト・フィールドを手動で追加する場合は、値を引用符で囲んでください。例:
"{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] trace_id=\"{trace_id}\" span_id=\"{span_id}\" service.name=\"{service_name}\" service.version=\"{service_version}\" deployment.environment=\"{deployment_environment}\"{NewLine}{Message:lj}{NewLine}{Exception}"
Serilogはドットセパレータ( .
)を使用するプロパティ名をサポートしていないため、インストルメンテーションはフィールド名のセパレータとしてアンダースコア文字を使用します( _
)。ログデータを取り込むには、以下の変換ルールを定義します:
service_name
からservice.name
service_version
からservice.version
deployment_environment
からdeployment.environment
ILogger 🔗
NetEscapades.Extensions.Logging.RollingFile
パッケージを使用する場合は、IncludeScopes
オプションを有効にし、json
フォーマッターを使用します。例:
Host.ConfigureLogging(builder =>
builder.AddFile(opts =>
{
opts.FileName = "logs";
opts.Extension = "json";
opts.FormatterName = "json"; // supported formatter
opts.IncludeScopes = true; // addition
})
);
注釈
SignalFx Instrumentation for .NETはILogger 2.5.0以降のみをサポートしています。
ログ相関は、ILogger が他のサポートされているロガーをラップしている場合にも機能します。
サンプルアプリケーション 🔗
ログ相関の設定方法を示すいくつかのサンプルアプリケーションをダウンロードするには、GitHubの https://github.com/signalfx/signalfx-dotnet-tracing/tree/main/tracer/samples/AutomaticTraceIdInjection を参照してください。