SDKの設定

SDKAPIの組み込み参照実装で、計装API呼び出しによって生成されたテレメトリーを処理およびエクスポートします。 テレメトリーを適切に処理およびエクスポートするようにSDKを設定することは、OpenTelemetryをアプリケーションに統合するために不可欠なステップです。

すべてのSDKコンポーネントにはプログラム設定APIがあります。 これは、SDKを設定する最も柔軟で表現力豊かな方法です。 ただし、設定を変更するにはコードを調整してアプリケーションを再コンパイルする必要があり、APIがJavaで書かれているため言語の相互運用性がありません。

ゼロコードSDK自動設定モジュールは、システムプロパティまたは環境変数を通じてSDKコンポーネントを設定し、プロパティが不十分な場合のさまざまな拡張ポイントを提供します。

プログラム設定

プログラム設定インターフェースは、SDKコンポーネントを構築するためのAPIのセットです。 すべてのSDKコンポーネントにはプログラム設定APIがあり、他のすべての設定メカニズムはこのAPIの上に構築されています。 たとえば、自動設定環境変数とシステムプロパティ設定インターフェースは、よく知られた環境変数とシステムプロパティをプログラム設定APIへの一連の呼び出しに解釈します。

他の設定メカニズムはより便利ですが、必要な正確な設定を表現するコードを書くことの柔軟性を提供するものはありません。 特定の機能が上位の設定メカニズムでサポートされていない場合、プログラム設定を使用するしかない場合があります。

SDKコンポーネントセクションでは、SDKの主要なユーザー向け領域の簡単なプログラム設定APIを示しています。 完全なAPIリファレンスについてはコードを参照してください。

ゼロコードSDK自動設定

自動設定モジュール(アーティファクトio.opentelemetry:opentelemetry-sdk-extension-autoconfigure:1.50.0)は、プログラム設定インターフェースの上に構築された設定インターフェースで、SDKコンポーネントをゼロコードで設定します。 2つの異なる自動設定ワークフローがあります。

  • 環境変数とシステムプロパティは、環境変数とシステムプロパティを解釈してSDKコンポーネントを作成し、プログラム設定をオーバーレイするためのさまざまなカスタマイゼーションポイントを含みます
  • 宣言的設定現在開発中)は、設定モデルを解釈してSDKコンポーネントを作成し、通常はYAML設定ファイルでエンコードされます

自動設定を使用してSDKコンポーネントを自動的に設定するには以下のようにします。

package otel;

import io.opentelemetry.sdk.OpenTelemetrySdk;
import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk;

public class AutoConfiguredSdk {
  public static OpenTelemetrySdk autoconfiguredSdk() {
    return AutoConfiguredOpenTelemetrySdk.initialize().getOpenTelemetrySdk();
  }
}

環境変数とシステムプロパティ

自動設定モジュールは、環境変数設定仕様にリストされているプロパティをサポートし、時々実験的およびJava固有の追加があります。

以下のプロパティはシステムプロパティとしてリストされていますが、環境変数を使用して設定することもできます。 システムプロパティを環境変数に変換するには以下のステップを適用してください。

  • 名前を大文字に変換します
  • すべての.-文字を_に置き換えます

たとえば、otel.sdk.enabledシステムプロパティはOTEL_SDK_ENABLED環境変数と同等です。

プロパティがシステムプロパティと環境変数の両方として定義されている場合、システムプロパティが優先されます。

プロパティ:一般

SDKを無効にするためのプロパティ。

システムプロパティ説明デフォルト
otel.sdk.disabledtrueの場合、OpenTelemetry SDKを無効にします。[1]false

[1]: 無効にした場合、AutoConfiguredOpenTelemetrySdk#getOpenTelemetrySdk()は最小限に設定されたインスタンス(例:OpenTelemetrySdk.builder().build())を返します。

属性制限のプロパティ(スパン制限ログ制限を参照)。

システムプロパティ説明デフォルト
otel.attribute.value.length.limit属性値の最大長。スパンとログに適用されます。otel.span.attribute.value.length.limitotel.span.attribute.count.limitによってオーバーライドされます。制限なし
otel.attribute.count.limit属性の最大数。スパン、スパンイベント、スパンリンク、ログに適用されます。128

コンテキスト伝播のプロパティ。

システムプロパティ説明デフォルト
otel.propagatorsプロパゲーターのカンマ区切りリスト。既知の値にはtracecontextbaggageb3b3multijaegerottracexrayxray-lambdaが含まれます。[1]tracecontext,baggage(W3C)

[1]: 既知のプロパゲーターとアーティファクト(アーティファクト座標についてはtext map propagatorを参照)。

  • tracecontextW3CTraceContextPropagatorを設定します
  • baggageW3CBaggagePropagatorを設定します
  • b3b3multiB3Propagatorを設定します
  • jaegerJaegerPropagatorを設定します
  • ottraceOtTracePropagatorを設定します
  • xrayAwsXrayPropagatorを設定します
  • xray-lambdaAwsXrayLambdaPropagatorを設定します

プロパティ:リソース

リソースを設定するためのプロパティ。

システムプロパティ説明デフォルト
otel.service.name論理サービス名を指定します。otel.resource.attributesで定義されたservice.nameよりも優先されます。unknown_service:java
otel.resource.attributes次の形式でリソース属性を指定します:key1=val1,key2=val2,key3=val3
otel.resource.disabled.keysフィルタリングするリソース属性キーを指定します。
otel.java.enabled.resource.providers有効にするResourceProvider完全修飾クラス名のカンマ区切りリスト。[1] 設定されていない場合、すべてのリソースプロバイダーが有効になります。
otel.java.disabled.resource.providers無効にするResourceProvider完全修飾クラス名のカンマ区切りリスト。[1]

[1]: たとえば、OSリソースプロバイダーを無効にするには、-Dotel.java.disabled.resource.providers=io.opentelemetry.instrumentation.resources.OsResourceProviderを設定します。

注意: otel.service.nameotel.resource.attributesシステムプロパティ/環境変数は、io.opentelemetry.sdk.autoconfigure.internal.EnvironmentResourceProviderリソースプロバイダーで解釈されます。otel.java.enabled.resource-providers経由でリソースプロバイダーを指定することを選択した場合、サプライズを避けるためにそれを含めたい場合があります。リソースプロバイダーのアーティファクト座標についてはResourceProviderを参照してください。

プロパティ:トレース

otel.traces.exporterで指定されたエクスポーターと組み合わせたバッチスパンプロセッサーのプロパティ。

システムプロパティ説明デフォルト
otel.bsp.schedule.delay2つの連続するエクスポート間の間隔(ミリ秒)。5000
otel.bsp.max.queue.sizeバッチ処理前にキューに入れられるスパンの最大数。2048
otel.bsp.max.export.batch.size単一バッチでエクスポートするスパンの最大数。512
otel.bsp.export.timeoutデータをエクスポートする最大許可時間(ミリ秒)。30000

サンプラーのプロパティ。

システムプロパティ説明デフォルト
otel.traces.sampler使用するサンプラー。既知の値にはalways_onalways_offtraceidratioparentbased_always_onparentbased_always_offparentbased_traceidratiojaeger_remoteが含まれます。[1]parentbased_always_on
otel.traces.sampler.argサポートされている場合の設定されたトレーサーへの引数(例:比率)。

[1]: 既知のサンプラーとアーティファクト(アーティファクト座標についてはsamplerを参照)。

  • always_onAlwaysOnSamplerを設定します
  • always_offAlwaysOffSamplerを設定します
  • traceidratioTraceIdRatioBasedを設定します。otel.traces.sampler.argで比率を設定します
  • parentbased_always_onParentBased(root=AlwaysOnSampler)を設定します
  • parentbased_always_offParentBased(root=AlwaysOffSampler)を設定します
  • parentbased_traceidratioParentBased(root=TraceIdRatioBased)を設定します。otel.traces.sampler.argで比率を設定します
  • jaeger_remoteJaegerRemoteSamplerを設定します。otel.traces.sampler.arg仕様で説明されている引数のカンマ区切りリストです

スパン制限のプロパティ。

システムプロパティ説明デフォルト
otel.span.attribute.value.length.limitスパン属性値の最大長。otel.attribute.value.length.limitよりも優先されます。制限なし
otel.span.attribute.count.limitスパンごとの属性の最大数。otel.attribute.count.limitよりも優先されます。128
otel.span.event.count.limitスパンごとのイベントの最大数。128
otel.span.link.count.limitスパンごとのリンクの最大数。128

プロパティ:メトリクス

定期的メトリクスリーダーのプロパティ。

システムプロパティ説明デフォルト
otel.metric.export.interval2つのエクスポート試行の開始間の間隔(ミリ秒)。60000

エグザンプラーのプロパティ。

システムプロパティ説明デフォルト
otel.metrics.exemplar.filterエグザンプラーサンプリングのフィルター。ALWAYS_OFFALWAYS_ONTRACE_BASEDのいずれかです。TRACE_BASED

カーディナリティ制限のプロパティ。

システムプロパティ説明デフォルト
otel.experimental.metrics.cardinality.limit設定された場合、カーディナリティ制限を設定します。値はメトリクスごとの異なるポイントの最大数を指示します。このオプションは実験的で、変更または削除される可能性があります。2000

プロパティ:ログ

otel.logs.exporter経由でエクスポーターと組み合わせたログレコードプロセッサーのプロパティ。

システムプロパティ説明デフォルト
otel.blrp.schedule.delay2つの連続するエクスポート間の間隔(ミリ秒)。1000
otel.blrp.max.queue.sizeバッチ処理前にキューに入れられるログレコードの最大数。2048
otel.blrp.max.export.batch.size単一バッチでエクスポートするログレコードの最大数。512
otel.blrp.export.timeoutデータをエクスポートする最大許可時間(ミリ秒)。30000

プロパティ:エクスポーター

エクスポーターを設定するためのプロパティ。

システムプロパティ目的デフォルト
otel.traces.exporterスパンエクスポーターのカンマ区切りリスト。既知の値にはotlpzipkinconsolelogging-otlpnoneが含まれます。[1]otlp
otel.metrics.exporterメトリクスエクスポーターのカンマ区切りリスト。既知の値にはotlpprometheusnoneが含まれます。[1]otlp
otel.logs.exporterログレコードエクスポーターのカンマ区切りリスト。既知の値にはotlpconsolelogging-otlpnoneが含まれます。[1]otlp
otel.java.exporter.memory_modereusable_dataの場合、アロケーションを削減するために(サポートするエクスポーターで)再利用可能メモリモードを有効にします。既知の値にはreusable_dataimmutable_dataが含まれます。[2]reusable_data

[1]: 既知のエクスポーターとアーティファクト(エクスポーターのアーティファクト座標についてはspan exportermetric exporterlog exporterを参照)。

  • otlpOtlpHttp{Signal}Exporter / OtlpGrpc{Signal}Exporterを設定します
  • zipkinZipkinSpanExporterを設定します
  • consoleLoggingSpanExporterLoggingMetricExporterSystemOutLogRecordExporterを設定します
  • logging-otlpOtlpJsonLogging{Signal}Exporterを設定します
  • experimental-otlp/stdoutOtlpStdout{Signal}Exporterを設定します(このオプションは実験的で、変更または削除される可能性があります)

[2]: otel.java.exporter.memory_mode=reusable_dataに準拠するエクスポーターは、OtlpGrpc{Signal}ExporterOtlpHttp{Signal}ExporterOtlpStdout{Signal}ExporterPrometheusHttpServerです。

otlpスパン、メトリクス、ログエクスポーターのプロパティ。

システムプロパティ説明デフォルト
otel.{signal}.exporter=otlp{signal}用のOpenTelemetryエクスポーターを選択します。
otel.exporter.otlp.protocolOTLPトレース、メトリクス、ログリクエストで使用するトランスポートプロトコル。オプションにはgrpchttp/protobufが含まれます。grpc [1]
otel.exporter.otlp.{signal}.protocolOTLP {signal}リクエストで使用するトランスポートプロトコル。オプションにはgrpchttp/protobufが含まれます。grpc [1]
otel.exporter.otlp.endpointすべてのOTLPトレース、メトリクス、ログを送信するエンドポイント。多くの場合、OpenTelemetry Collectorのアドレスです。TLSの使用に基づいてhttpまたはhttpsのスキームを持つURLでなければなりません。プロトコルがgrpcの場合はhttp://localhost:4317、プロトコルがhttp/protobufの場合はhttp://localhost:4318
otel.exporter.otlp.{signal}.endpointOTLP {signal}を送信するエンドポイント。多くの場合、OpenTelemetry Collectorのアドレスです。TLSの使用に基づいてhttpまたはhttpsのスキームを持つURLでなければなりません。プロトコルがhttp/protobufの場合、バージョンとシグナルをパスに追加する必要があります(例:v1/tracesv1/metricsv1/logsプロトコルがgrpcの場合はhttp://localhost:4317、プロトコルがhttp/protobufの場合はhttp://localhost:4318/v1/{signal}
otel.exporter.otlp.certificateOTLPトレース、メトリクス、ログサーバーのTLS認証を検証するときに使用する信頼できる証明書を含むファイルのパス。ファイルはPEM形式の1つ以上のX.509証明書を含む必要があります。ホストプラットフォームの信頼できるルート証明書が使用されます。
otel.exporter.otlp.{signal}.certificateOTLP {signal}サーバーのTLS認証を検証するときに使用する信頼できる証明書を含むファイルのパス。ファイルはPEM形式の1つ以上のX.509証明書を含む必要があります。ホストプラットフォームの信頼できるルート証明書が使用されます
otel.exporter.otlp.client.keyOTLPトレース、メトリクス、ログクライアントのTLS認証を検証するときに使用するプライベートクライアントキーを含むファイルのパス。ファイルは1つのプライベートキーPKCS8 PEM形式を含む必要があります。クライアントキーファイルは使用されません。
otel.exporter.otlp.{signal}.client.keyOTLP {signal}クライアントのTLS認証を検証するときに使用するプライベートクライアントキーを含むファイルのパス。ファイルは1つのプライベートキーPKCS8 PEM形式を含む必要があります。クライアントキーファイルは使用されません。
otel.exporter.otlp.client.certificateOTLPトレース、メトリクス、ログクライアントのTLS認証を検証するときに使用する信頼できる証明書を含むファイルのパス。ファイルはPEM形式の1つ以上のX.509証明書を含む必要があります。チェインファイルは使用されません。
otel.exporter.otlp.{signal}.client.certificateOTLP {signal}サーバーのTLS認証を検証するときに使用する信頼できる証明書を含むファイルのパス。ファイルはPEM形式の1つ以上のX.509証明書を含む必要があります。チェインファイルは使用されません。
otel.exporter.otlp.headersOTLPトレース、メトリクス、ログリクエストでリクエストヘッダーとして渡すカンマで区切られたキー値ペア。
otel.exporter.otlp.{signal}.headersOTLP {signal}リクエストでリクエストヘッダーとして渡すカンマで区切られたキー値ペア。
otel.exporter.otlp.compressionOTLPトレース、メトリクス、ログリクエストで使用する圧縮タイプ。オプションにはgzipが含まれます。圧縮は使用されません。
otel.exporter.otlp.{signal}.compressionOTLP {signal}リクエストで使用する圧縮タイプ。オプションにはgzipが含まれます。圧縮は使用されません。
otel.exporter.otlp.timeout各OTLPトレース、メトリクス、ログバッチの送信に許可される最大待機時間(ミリ秒)。10000
otel.exporter.otlp.{signal}.timeout各OTLP {signal}バッチの送信に許可される最大待機時間(ミリ秒)。10000
otel.exporter.otlp.metrics.temporality.preference希望する出力集約時間性。オプションにはDELTALOWMEMORYCUMULATIVEが含まれます。CUMULATIVEの場合、すべての計装が累積時間性を持ちます。DELTAの場合、カウンター(同期および非同期)とヒストグラムがデルタ、アップダウンカウンター(同期および非同期)が累積になります。LOWMEMORYの場合、同期カウンターとヒストグラムがデルタ、非同期カウンターとアップダウンカウンター(同期および非同期)が累積になります。CUMULATIVE
otel.exporter.otlp.metrics.default.histogram.aggregation希望するデフォルトヒストグラム集約。オプションにはBASE2_EXPONENTIAL_BUCKET_HISTOGRAMEXPLICIT_BUCKET_HISTOGRAMが含まれます。EXPLICIT_BUCKET_HISTOGRAM
otel.java.exporter.otlp.retry.disabledfalseの場合、一時的なエラーが発生したときにリトライします。[2]false

注意: テキストプレースホルダー{signal}は、サポートされているOpenTelemetry Signalを指します。有効な値にはtracesmetricslogsが含まれます。シグナル固有の設定は汎用バージョンよりも優先されます。 たとえば、otel.exporter.otlp.endpointotel.exporter.otlp.traces.endpointの両方を設定した場合、後者が優先されます。

[1]: OpenTelemetry Javaエージェント 2.xとOpenTelemetry Spring Boot starterは、デフォルトでhttp/protobufを使用します。

[2]: OTLPは、一時的エラーをリトライストラテジーで処理することを要求します。リトライが有効な場合、リトライ可能なgRPCステータスコードはジッターアルゴリズムを使用した指数バックオフでリトライされます。RetryPolicyの特定のオプションはプログラムカスタマイゼーションを介してのみカスタマイズできます。

zipkinスパンエクスポーターのプロパティ。

システムプロパティ説明デフォルト
otel.traces.exporter=zipkinZipkinエクスポーターを選択
otel.exporter.zipkin.endpoint接続するZipkinエンドポイント。HTTPのみがサポートされます。http://localhost:9411/api/v2/spans

prometheusメトリクスエクスポーターのプロパティ。

システムプロパティ説明デフォルト
otel.metrics.exporter=prometheusPrometheusエクスポーターを選択
otel.exporter.prometheus.portPrometheusメトリクスサーバーをバインドするローカルポート。9464
otel.exporter.prometheus.hostPrometheusメトリクスサーバーをバインドするローカルアドレス。0.0.0.0

プログラムカスタマイゼーション

プログラムカスタマイゼーションは、サポートされているプロパティプログラム設定で補完するフックを提供します。

Springスターターを使用している場合は、Springスタータープログラム設定も参照してください。

package otel;

import io.opentelemetry.sdk.OpenTelemetrySdk;
import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk;
import java.util.Collections;

public class CustomizedAutoConfiguredSdk {
  public static OpenTelemetrySdk autoconfiguredSdk() {
    return AutoConfiguredOpenTelemetrySdk.builder()
        // オプションでTextMapPropagatorをカスタマイズ。
        .addPropagatorCustomizer((textMapPropagator, configProperties) -> textMapPropagator)
        // オプションでResourceをカスタマイズ。
        .addResourceCustomizer((resource, configProperties) -> resource)
        // オプションでSamplerをカスタマイズ。
        .addSamplerCustomizer((sampler, configProperties) -> sampler)
        // オプションでSpanExporterをカスタマイズ。
        .addSpanExporterCustomizer((spanExporter, configProperties) -> spanExporter)
        // オプションでSpanProcessorをカスタマイズ。
        .addSpanProcessorCustomizer((spanProcessor, configProperties) -> spanProcessor)
        // オプションで追加のプロパティを提供。
        .addPropertiesSupplier(Collections::emptyMap)
        // オプションでConfigPropertiesをカスタマイズ。
        .addPropertiesCustomizer(configProperties -> Collections.emptyMap())
        // オプションでSdkTracerProviderBuilderをカスタマイズ。
        .addTracerProviderCustomizer((builder, configProperties) -> builder)
        // オプションでSdkMeterProviderBuilderをカスタマイズ。
        .addMeterProviderCustomizer((builder, configProperties) -> builder)
        // オプションでMetricExporterをカスタマイズ。
        .addMetricExporterCustomizer((metricExporter, configProperties) -> metricExporter)
        // オプションでMetricReaderをカスタマイズ。
        .addMetricReaderCustomizer((metricReader, configProperties) -> metricReader)
        // オプションでSdkLoggerProviderBuilderをカスタマイズ。
        .addLoggerProviderCustomizer((builder, configProperties) -> builder)
        // オプションでLogRecordExporterをカスタマイズ。
        .addLogRecordExporterCustomizer((logRecordExporter, configProperties) -> logRecordExporter)
        // オプションでLogRecordProcessorをカスタマイズ。
        .addLogRecordProcessorCustomizer((processor, configProperties) -> processor)
        .build()
        .getOpenTelemetrySdk();
  }
}

SPI(Service provider interface)

SPIs(アーティファクトio.opentelemetry:opentelemetry-sdk-extension-autoconfigure-spi:1.50.0)は、SDKに組み込まれたコンポーネントを超えてSDK自動設定を拡張します。

以下のセクションでは、利用可能なSPIについて説明します。 各SPIセクションには以下が含まれます。

  • Javadoc型リファレンスへのリンクを含む簡潔な説明
  • 利用可能な組み込みおよびopentelemetry-java-contrib実装のテーブル
  • カスタム実装の簡単なデモンストレーション
ResourceProvider

ResourceProviderは、自動設定されたリソースに貢献します。

SDKに組み込まれ、opentelemetry-java-contribでコミュニティによって維持されているResourceProviderです。

クラスアーティファクト説明
io.opentelemetry.sdk.autoconfigure.internal.EnvironmentResourceProviderio.opentelemetry:opentelemetry-sdk-extension-autoconfigure:1.50.0OTEL_SERVICE_NAMEおよびOTEL_RESOURCE_ATTRIBUTES環境変数に基づいてリソース属性を提供します。
io.opentelemetry.instrumentation.resources.ContainerResourceProviderio.opentelemetry.instrumentation:opentelemetry-resources:2.16.0-alphaコンテナリソース属性を提供します。
io.opentelemetry.instrumentation.resources.HostResourceProviderio.opentelemetry.instrumentation:opentelemetry-resources:2.16.0-alphaホストリソース属性を提供します。
io.opentelemetry.instrumentation.resources.HostIdResourceProviderio.opentelemetry.instrumentation:opentelemetry-resources:2.16.0-alphaホストIDリソース属性を提供します。
io.opentelemetry.instrumentation.resources.ManifestResourceProviderio.opentelemetry.instrumentation:opentelemetry-resources:2.16.0-alphajarマニフェストに基づいてサービスリソース属性を提供します。
io.opentelemetry.instrumentation.resources.OsResourceProviderio.opentelemetry.instrumentation:opentelemetry-resources:2.16.0-alphaOSリソース属性を提供します。
io.opentelemetry.instrumentation.resources.ProcessResourceProviderio.opentelemetry.instrumentation:opentelemetry-resources:2.16.0-alphaプロセスリソース属性を提供します。
io.opentelemetry.instrumentation.resources.ProcessRuntimeResourceProviderio.opentelemetry.instrumentation:opentelemetry-resources:2.16.0-alphaプロセスランタイムリソース属性を提供します。
io.opentelemetry.contrib.gcp.resource.GCPResourceProviderio.opentelemetry.contrib:opentelemetry-gcp-resources:1.46.0-alphaGCPランタイム環境リソース属性を提供します。
io.opentelemetry.contrib.aws.resource.BeanstalkResourceProviderio.opentelemetry.contrib:opentelemetry-aws-resources:1.46.0-alphaAWS Elastic Beanstalkランタイム環境リソース属性を提供します。
io.opentelemetry.contrib.aws.resource.Ec2ResourceProviderio.opentelemetry.contrib:opentelemetry-aws-resources:1.46.0-alphaAmazon EC2ランタイム環境リソース属性を提供します。
io.opentelemetry.contrib.aws.resource.EcsResourceProviderio.opentelemetry.contrib:opentelemetry-aws-resources:1.46.0-alphaAmazon EC2ランタイム環境リソース属性を提供します。
io.opentelemetry.contrib.aws.resource.EksResourceProviderio.opentelemetry.contrib:opentelemetry-aws-resources:1.46.0-alphaAmazon EKSランタイム環境リソース属性を提供します。
io.opentelemetry.contrib.aws.resource.LambdaResourceProviderio.opentelemetry.contrib:opentelemetry-aws-resources:1.46.0-alphaAWS Lambdaランタイム環境リソース属性を提供します。

リソース自動設定に参加するには、ResourceProviderインターフェースを実装してください。 例を挙げましょう。

package otel;

import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
import io.opentelemetry.sdk.autoconfigure.spi.ResourceProvider;
import io.opentelemetry.sdk.resources.Resource;

public class CustomResourceProvider implements ResourceProvider {

  @Override
  public Resource createResource(ConfigProperties config) {
    // リソースに貢献するために呼び出されるコールバック。
    return Resource.builder().put("my.custom.resource.attribute", "abc123").build();
  }

  @Override
  public int order() {
    // オプションで呼び出し順序に影響を与える。
    return 0;
  }
}
AutoConfigurationCustomizerProvider

AutoConfigurationCustomizerProviderインターフェースを実装して、さまざまな自動設定されたSDKコンポーネントをカスタマイズします。 例を挙げましょう。

package otel;

import io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizer;
import io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizerProvider;
import java.util.Collections;

public class CustomizerProvider implements AutoConfigurationCustomizerProvider {

  @Override
  public void customize(AutoConfigurationCustomizer customizer) {
    // オプションでTextMapPropagatorをカスタマイズ。
    customizer.addPropagatorCustomizer((textMapPropagator, configProperties) -> textMapPropagator);
    // オプションでResourceをカスタマイズ。
    customizer.addResourceCustomizer((resource, configProperties) -> resource);
    // オプションでSamplerをカスタマイズ。
    customizer.addSamplerCustomizer((sampler, configProperties) -> sampler);
    // オプションでSpanExporterをカスタマイズ。
    customizer.addSpanExporterCustomizer((spanExporter, configProperties) -> spanExporter);
    // オプションでSpanProcessorをカスタマイズ。
    customizer.addSpanProcessorCustomizer((spanProcessor, configProperties) -> spanProcessor);
    // オプションで追加のプロパティを提供。
    customizer.addPropertiesSupplier(Collections::emptyMap);
    // オプションでConfigPropertiesをカスタマイズ。
    customizer.addPropertiesCustomizer(configProperties -> Collections.emptyMap());
    // オプションでSdkTracerProviderBuilderをカスタマイズ。
    customizer.addTracerProviderCustomizer((builder, configProperties) -> builder);
    // オプションでSdkMeterProviderBuilderをカスタマイズ。
    customizer.addMeterProviderCustomizer((builder, configProperties) -> builder);
    // オプションでMetricExporterをカスタマイズ。
    customizer.addMetricExporterCustomizer((metricExporter, configProperties) -> metricExporter);
    // オプションでMetricReaderをカスタマイズ。
    customizer.addMetricReaderCustomizer((metricReader, configProperties) -> metricReader);
    // オプションでSdkLoggerProviderBuilderをカスタマイズ。
    customizer.addLoggerProviderCustomizer((builder, configProperties) -> builder);
    // オプションでLogRecordExporterをカスタマイズ。
    customizer.addLogRecordExporterCustomizer((exporter, configProperties) -> exporter);
    // オプションでLogRecordProcessorをカスタマイズ。
    customizer.addLogRecordProcessorCustomizer((processor, configProperties) -> processor);
  }

  @Override
  public int order() {
    // オプションで呼び出し順序に影響を与える。
    return 0;
  }
}
ConfigurableSpanExporterProvider

ConfigurableSpanExporterProviderインターフェースを実装して、カスタムスパンエクスポーターが自動設定に参加できるようにします。 例を挙げましょう。

package otel;

import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
import io.opentelemetry.sdk.autoconfigure.spi.traces.ConfigurableSpanExporterProvider;
import io.opentelemetry.sdk.trace.export.SpanExporter;

public class CustomSpanExporterProvider implements ConfigurableSpanExporterProvider {

  @Override
  public SpanExporter createExporter(ConfigProperties config) {
    // OTEL_TRACES_EXPORTERにgetName()からの値が含まれる場合に呼び出されるコールバック。
    return new CustomSpanExporter();
  }

  @Override
  public String getName() {
    return "custom-exporter";
  }
}
ConfigurableMetricExporterProvider

ConfigurableMetricExporterProviderインターフェースを実装して、カスタムメトリクスエクスポーターが自動設定に参加できるようにします。 例を挙げましょう。

package otel;

import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
import io.opentelemetry.sdk.autoconfigure.spi.metrics.ConfigurableMetricExporterProvider;
import io.opentelemetry.sdk.metrics.export.MetricExporter;

public class CustomMetricExporterProvider implements ConfigurableMetricExporterProvider {

  @Override
  public MetricExporter createExporter(ConfigProperties config) {
    // OTEL_METRICS_EXPORTERにgetName()からの値が含まれる場合に呼び出されるコールバック。
    return new CustomMetricExporter();
  }

  @Override
  public String getName() {
    return "custom-exporter";
  }
}
ConfigurableLogRecordExporterProvider

ConfigurableLogRecordExporterProviderインターフェースを実装して、カスタムログレコードエクスポーターが自動設定に参加できるようにします。 例を挙げましょう。

package otel;

import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
import io.opentelemetry.sdk.autoconfigure.spi.logs.ConfigurableLogRecordExporterProvider;
import io.opentelemetry.sdk.logs.export.LogRecordExporter;

public class CustomLogRecordExporterProvider implements ConfigurableLogRecordExporterProvider {

  @Override
  public LogRecordExporter createExporter(ConfigProperties config) {
    // OTEL_LOGS_EXPORTERにgetName()からの値が含まれる場合に呼び出されるコールバック。
    return new CustomLogRecordExporter();
  }

  @Override
  public String getName() {
    return "custom-exporter";
  }
}
ConfigurableSamplerProvider

ConfigurableSamplerProviderインターフェースを実装して、カスタムサンプラーが自動設定に参加できるようにします。 例を挙げましょう。

package otel;

import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
import io.opentelemetry.sdk.autoconfigure.spi.traces.ConfigurableSamplerProvider;
import io.opentelemetry.sdk.trace.samplers.Sampler;

public class CustomSamplerProvider implements ConfigurableSamplerProvider {

  @Override
  public Sampler createSampler(ConfigProperties config) {
    // OTEL_TRACES_SAMPLERがgetName()からの値に設定されている場合に呼び出されるコールバック。
    return new CustomSampler();
  }

  @Override
  public String getName() {
    return "custom-sampler";
  }
}
ConfigurablePropagatorProvider

ConfigurablePropagatorProviderインターフェースを実装して、カスタムプロパゲーターが自動設定に参加できるようにします。 例を挙げましょう。

package otel;

import io.opentelemetry.context.propagation.TextMapPropagator;
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
import io.opentelemetry.sdk.autoconfigure.spi.ConfigurablePropagatorProvider;

public class CustomTextMapPropagatorProvider implements ConfigurablePropagatorProvider {
  @Override
  public TextMapPropagator getPropagator(ConfigProperties config) {
    // OTEL_PROPAGATORSにgetName()からの値が含まれる場合に呼び出されるコールバック。
    return new CustomTextMapPropagator();
  }

  @Override
  public String getName() {
    return "custom-propagator";
  }
}

宣言的設定

宣言的設定は現在開発中です。 これは、opentelemetry-configuration宣言的設定で説明されているYAMLファイルベースの設定を可能にします。

使用するには、io.opentelemetry:opentelemetry-sdk-extension-incubator:1.50.0-alphaを含め、以下の表で説明されているように設定ファイルのパスを指定します。

システムプロパティ目的デフォルト
otel.experimental.config.fileSDK設定ファイルのパス。未設定

詳細については、以下のリソースを参照してください。