Splunk Observability Cloud のログと Java トレースデータを接続する 🔗
The Splunk Distribution of OpenTelemetry Java agent automatically captures application logs and sends them to the OpenTelemetry Collector using the OTLP exporter, annotating the log events with trace ID, span ID, and trace flags.
If needed, you can configure your Java logging library to produce logs that include additional attributes provided automatically by the Splunk OTel Java agent, like the version of your service or the deployment environment.
注釈
Logs export requires the Splunk Distribution of OpenTelemetry Collector.
互換性と必要条件をチェック 🔗
Splunk OTel Java エージェントは以下のロギングライブラリをサポートしています:
Log4j 2 2.7 以上
Log4j 1 1.2 以上
Logback 1.0 以上
JBoss LogManager 1.1.0 and higher
java.util.logging
ライブラリは、Splunk Distribution of OpenTelemetry Javaと互換性のあるすべてのJDKバージョンで完全にサポートされています。Javaエージェントの互換性と要件 を参照してください。
ログ文のトレースメタデータ 🔗
The Splunk OTel Java agent automatically adds the following mapped diagnostic context (MDC) fields for logging libraries by default:
トレース情報:
trace_id
とspan_id
トレースフラグ
デフォルトの動作は、MDCフィールドをCollectorに送信しますが、アプリケーションログファイルには書き込みません。この情報をログファイルに含めるには、MDCフィールドを含めるようにロギングフレームワークの出力形式を設定する必要があります。ロギングフレームワークを設定するには、Configure your logging library を参照してください。
The Collector sends the annotated logs using the OTLP exporter.
Deactivate logs export 🔗
ログのエクスポートをオフにするには、OTEL_LOGS_EXPORTER
環境変数または otel.logs.exporter
システムプロパティを none
に設定します。
Inject resource attributes 🔗
Java エージェントは自動的にログを生成し、Collectorを通じてSplunkに送信しますが、互換性のあるログライブラリを使用して注釈付きログを生成し、ログを手動で収集したり、Universal Forwarderを経由したりすることもできます。Splunk Log Observer Connectの概要 を参照してください。
例えば、service.name
や deployment.environment
などのリソース属性をログ文に注入できます。このためには、注入したい属性を定義し、ロガーを手動で設定する必要があります。
Define the resource attributes 🔗
属性を注入する前に、実行時に mdc.resource-attributes
プロパティを設定してMDCから属性を利用できるようにする必要があります。例:
-Dotel.instrumentation.common.mdc.resource-attributes=service.name,deployment.environment
Configure your logging library 🔗
The Splunk Distribution of OpenTelemetry Java exposes resource attributes as context properties, which you can use to configure logger libraries.
The following examples show how to include additional metadata in log statements produced by the logging library:
Log4jのコンフィギュレーションを編集します。例えば、src/main/resources/log4j2.xml
。使用環境によっては、別のファイルを編集するか、別の構成システムを使わなければならない可能性があります。
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="STDOUT" target="SYSTEM_OUT">
<JsonLayout compact="true" eventEol="true">
<KeyValuePair key="trace_id" value="${ctx:trace_id}"/>
<KeyValuePair key="span_id" value="${ctx:span_id}"/>
<KeyValuePair key="service.name" value="${ctx:service.name}"/>
<KeyValuePair key="environment" value="${ctx:deployment.environment}"/>
<KeyValuePair key="trace_sampled" value="${ctx:trace_flags}"/>
</JsonLayout>
</Console>
</Appenders>
<!-- More configuration -->
</Configuration>
Spring Bootアプリケーションでは、application.properties
ファイルを編集して、以下のロギングパターンを追加することもできます:
logging.pattern.console = %d{yyyy-MM-dd HH:mm:ss} - %logger{36} - %msg trace_id=%X{trace_id} span_id=%X{span_id} service=%X{service.name}, env=%X{deployment.environment} trace_flags=%X{trace_flags} %n
src/main/resources/logback.xml
ファイルなどで、Logback の設定を編集してください。環境によっては、別のファイルを編集したり、別のコンフィギュレーションシステムを使用する必要がある可能性があります。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} - %logger{36} - %msg trace_id=%X{trace_id} span_id=%X{span_id} service=%X{service.name}, env=%X{deployment.environment} trace_flags=%X{trace_flags} %n</pattern>
</encoder>
</appender>
<root level="info">
<appender-ref ref="STDOUT" />
</root>
</configuration>
Spring Bootアプリケーションでは、application.properties
ファイルを編集して、以下のロギングパターンを追加することもできます:
logging.pattern.console = %d{yyyy-MM-dd HH:mm:ss} - %logger{36} - %msg %logger{36} - %msg trace_id=%X{trace_id} span_id=%X{span_id} service=%X{service.name}, env=%X{deployment.environment} trace_flags=%X{trace_flags} %n %n
JBoss LogManagerの設定を編集します( logging.properties
ファイルなど)。
formatter.PATTERN=org.jboss.logmanager.formatters.PatternFormatter
formatter.PATTERN.properties=pattern
formatter.PATTERN.constructorProperties=pattern
formatter.PATTERN.pattern=%logger{36} - %msg trace_id=%X{trace_id} span_id=%X{span_id} service=%X{service.name}, env=%X{deployment.environment} trace_flags=%X{trace_flags}: %m%n
If you’re instrumenting a serverless service or application, use environment variables instead. The deployment environment requires that you set an arbitrary environment variable, for example OTEL_ENV_NAME
.
<PatternLayout>
<pattern>
service.name=${OTEL_SERVICE_NAME}, deployment.environment=${OTEL_ENV_NAME} %m%n
</pattern>
</PatternLayout>
<pattern>
service: ${OTEL_SERVICE_NAME}, env: ${OTEL_ENV_NAME}: %m%n
</pattern>
formatter.PATTERN.pattern=service=${OTEL_SERVICE_NAME}, env=${OTEL_ENV_NAME}