Splunk Observability Cloud のログと Java トレースデータを接続する 🔗
Splunk Distribution of OpenTelemetry Javaエージェントは、アプリケーションログを自動的にキャプチャし、OTLPエクスポーターを使用してOpen Telemetry Collectorに送信し、ログイベントにトレースID、スパンID、トレースフラグでアノテーションを付けます。
必要に応じて、サービスのバージョンやデプロイ環境など、Splunk OTel Javaエージェントによって自動的に提供される追加の属性を含むログを生成するようにJavaロギングライブラリを設定できます。
注釈
ログのエクスポートには、Splunk Distribution of OpenTelemetry Collectorが必要です。
互換性と必要条件をチェック 🔗
Splunk OTel Java エージェントは以下のロギングライブラリをサポートしています:
Log4j 2 2.7 以上
Log4j 1 1.2 以上
Logback 1.0 以上
JBoss LogManager 1.1.0以上
java.util.logging
ライブラリは、Splunk Distribution of OpenTelemetry Javaと互換性のあるすべてのJDKバージョンで完全にサポートされています。Javaエージェントの互換性と要件 を参照してください。
ログ文のトレースメタデータ 🔗
Splunk OTel Javaエージェントは、デフォルトでログライブラリ用に次のMapped Diagnostic Context(MDC)フィールドを自動的に追加します。
トレース情報:
trace_id
とspan_id
トレースフラグ
デフォルトの動作は、MDCフィールドをCollectorに送信しますが、アプリケーションログファイルには書き込みません。この情報をログファイルに含めるには、MDCフィールドを含めるようにロギングフレームワークの出力形式を設定する必要があります。ロギングフレームワークを設定するには、ロギングライブラリを設定する を参照してください。
Collectorは、OTLPエクスポーターを使用してアノテーションを付けたログを送信します。
ログのエクスポートを無効にする 🔗
ログのエクスポートをオフにするには、OTEL_LOGS_EXPORTER
環境変数または otel.logs.exporter
システムプロパティを none
に設定します。
リソース属性を注入する 🔗
Java エージェントは自動的にログを生成し、Collectorを通じてSplunkに送信しますが、互換性のあるログライブラリを使用して注釈付きログを生成し、ログを手動で収集したり、Universal Forwarderを経由したりすることもできます。Splunk Log Observer Connectの概要 を参照してください。
例えば、service.name
や deployment.environment
などのリソース属性をログ文に注入できます。このためには、注入したい属性を定義し、ロガーを手動で設定する必要があります。
リソース属性を定義する 🔗
属性を注入する前に、実行時に mdc.resource-attributes
プロパティを設定してMDCから属性を利用できるようにする必要があります。例:
-Dotel.instrumentation.common.mdc.resource-attributes=service.name,deployment.environment
ロギングライブラリを設定する 🔗
Splunk Distribution of OpenTelemetry Javaは、ロガーライブラリを設定するために使用できるコンテキストプロパティをプレフィックスとするシステムプロパティとして、リソース属性を公開しています。
以下の例は、ロギングライブラリが生成するログ文に追加のメタデータを含める方法を示しています:
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
サーバーレスサービスまたはアプリケーションをインストルメント化する場合は、代わりに環境変数を使用します。デプロイ環境では、たとえば 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}