配置 SDK

SDK 是 API 的内置参考实现,负责处理和导出由仪器化 API 调用产生的遥测数据。配置 SDK 以适当地处理和导出数据是集成 OpenTelemetry 到应用程序中的关键步骤。

所有 SDK 组件都具有程序化配置 API。这是配置 SDK 最灵活、最具表达力的方式。但是,更改配置需要修改代码并重新编译应用程序,并且由于 API 是用 Java 编写的,因此没有语言互操作性。

零代码 SDK 自动配置模块通过系统属性或环境变量配置 SDK 组件,并提供各种扩展点,适用于属性不足的情况。

以编程方式配置

程序化配置接口是用于构建 SDK 组件的 API 集合。所有 SDK 组件都有程序化配置 API,并且所有其他配置机制都构建在此 API 之上。例如,自动配置环境变量和系统属性配置接口会解释众所周知的环境变量和系统属性,并将其转换为一系列对程序化配置 API 的调用。

虽然其他配置机制提供了更多便利,但没有一种能像编写代码那样灵活地表达所需的精确配置。当某个功能不被更高阶的配置机制支持时,您可能别无选择,只能使用程序化配置。

SDK 组件部分展示了 SDK 关键用户区域的简单程序化配置 API。有关完整的 API 参考,请查阅代码。

零代码 SDK 自动配置

自动配置模块(artifact io.opentelemetry:opentelemetry-sdk-extension-autoconfigure:1.57.0)是建立在程序化配置接口之上的配置接口,它使用零代码配置SDK 组件。有两种不同的自动配置工作流:

  • 环境变量和系统属性会解释环境变量和系统属性来创建 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.disabled 系统属性等同于 OTEL_SDK_DISABLED 环境变量。

如果一个属性同时定义为系统属性和环境变量,则系统属性具有优先权。

属性:通用

用于禁用SDK的属性

系统属性描述默认值
otel.sdk.disabled如果设置为 true,则禁用 OpenTelemetry SDK。[1]false

[1]:如果被禁用,AutoConfiguredOpenTelemetrySdk#getOpenTelemetrySdk() 将返回一个最小配置的实例(例如,OpenTelemetrySdk.builder().build())。

属性:属性限制(请参阅span 限制日志限制

系统属性描述默认值
otel.attribute.value.length.limit属性值的最大长度。适用于 span 和日志。会被 otel.span.attribute.value.length.limitotel.span.attribute.count.limit 覆盖。无限制
otel.attribute.count.limit属性的最大数量。适用于 span、span 事件、span 链接和日志。128

属性:上下文传播

系统属性描述默认值
otel.propagators逗号分隔的传播器列表。已知值包括 tracecontextbaggageb3b3multijaegerottracexrayxray-lambda[1]tracecontext,baggage (W3C)

[1]:已知传播器和 artifact(有关 artifact 坐标,请参阅文本映射传播器

  • tracecontext 配置 W3CTraceContextPropagator
  • baggage 配置 W3CBaggagePropagator
  • b3b3multi 配置 B3Propagator
  • jaeger 配置 JaegerPropagator
  • ottrace 配置 OtTracePropagator
  • xray 配置 AwsXrayPropagator
  • xray-lambda 配置 AwsXrayLambdaPropagator

属性:资源

用于配置资源的属性

系统属性描述默认值
otel.service.name指定逻辑服务名称。优先于 otel.resource.attributes 定义的 service.nameunknown_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]:例如,要禁用操作系统资源提供程序,请设置 -Dotel.java.disabled.resource.providers=io.opentelemetry.instrumentation.resources.OsResourceProvider

注意otel.service.nameotel.resource.attributes 系统属性/环境变量由 io.opentelemetry.sdk.autoconfigure.EnvironmentResourceProvider 资源提供程序解释。如果您选择通过 otel.java.enabled.resource-providers 指定资源提供程序,您可能需要包含它以避免意外。有关资源提供程序 artifact 坐标,请参阅ResourceProvider

属性:追踪

用于批处理 span 处理器的属性,与通过 otel.traces.exporter 指定的导出器配对。

系统属性描述默认值
otel.bsp.schedule.delay两次连续导出之间的间隔(以毫秒为单位)。5000
otel.bsp.max.queue.size批处理前可排队的 span 的最大数量。2048
otel.bsp.max.export.batch.size一次导出批次中的最大 span 数量。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]:已知采样器和 artifact(有关 artifact 坐标,请参阅采样器

  • always_on 配置 AlwaysOnSampler
  • always_off 配置 AlwaysOffSampler
  • traceidratio 配置 TraceIdRatioBasedotel.traces.sampler.arg 设置比例。
  • parentbased_always_on 配置 ParentBased(root=AlwaysOnSampler)
  • parentbased_always_off 配置 ParentBased(root=AlwaysOffSampler)
  • parentbased_traceidratio 配置 ParentBased(root=TraceIdRatioBased)otel.traces.sampler.arg 设置比例。
  • jaeger_remote 配置 JaegerRemoteSamplerotel.traces.sampler.arg 是一个逗号分隔的参数列表,如规范中所述。

属性:span 限制

系统属性描述默认值
otel.span.attribute.value.length.limit每个 span 的属性值的最大长度。优先于 otel.attribute.value.length.limit无限制
otel.span.attribute.count.limit每个 span 的最大属性数量。优先于 otel.attribute.count.limit128
otel.span.event.count.limit每个 span 的最大事件数量。128
otel.span.link.count.limit每个 span 的最大链接数量。128

属性:指标

用于周期性指标读取器的属性

系统属性描述默认值
otel.metric.export.interval两次导出尝试开始之间的间隔(以毫秒为单位)。60000

属性:示例

系统属性描述默认值
otel.metrics.exemplar.filter示例采样过滤器。可以是 ALWAYS_OFFALWAYS_ONTRACE_BASEDTRACE_BASED

属性:基数限制

系统属性描述默认值
otel.java.metrics.cardinality.limit如果设置,则配置基数限制。该值决定了每个指标的最大不重复点数。2000

属性:日志

用于日志记录处理器的属性,与通过 otel.logs.exporter 指定的导出器配对。

系统属性描述默认值
otel.blrp.schedule.delay两次连续导出之间的间隔(以毫秒为单位)。1000
otel.blrp.max.queue.size批处理前可排队的日志记录的最大数量。2048
otel.blrp.max.export.batch.size一次导出批次中的最大日志记录数量。512
otel.blrp.export.timeout导出数据允许的最大时间(以毫秒为单位)。30000

属性:导出器

用于设置导出器的属性

系统属性目的默认值
otel.traces.exporter逗号分隔的 span 导出器列表。已知值包括 otlpzipkinconsolelogging-otlpnone[1]otlp
otel.metrics.exporter逗号分隔的指标导出器列表。已知值包括 otlpprometheusnone[1]otlp
otel.logs.exporter逗号分隔的日志记录导出器列表。已知值包括 otlpconsolelogging-otlpnone[1]otlp
otel.java.exporter.memory_mode如果设置为 reusable_data,则启用可重用内存模式(在支持它的导出器上)以减少内存分配。已知值包括 reusable_dataimmutable_data[2]reusable_data

[1]:已知导出器和 artifact(有关导出器 artifact 坐标,请参阅span 导出器指标导出器日志记录导出器

  • otlp 配置 OtlpHttp{Signal}Exporter / OtlpGrpc{Signal}Exporter
  • zipkin 配置 ZipkinSpanExporter
  • console 配置 LoggingSpanExporterLoggingMetricExporterSystemOutLogRecordExporter
  • logging-otlp 配置 OtlpJsonLogging{Signal}Exporter
  • experimental-otlp/stdout 配置 OtlpStdout{Signal}Exporter(此选项为实验性的,可能会更改或删除)。

[2]:支持 otel.java.exporter.memory_mode=reusable_data 的导出器包括 OtlpGrpc{Signal}ExporterOtlpHttp{Signal}ExporterOtlpStdout{Signal}ExporterPrometheusHttpServer

用于 otlp span、metric 和 log 导出器的属性

系统属性描述默认值
otel.{signal}.exporter=otlp选择 {signal} 的 OpenTelemetry 导出器。
otel.exporter.otlp.protocol在 OTLP trace、metric 和 log 请求上使用的传输协议。选项包括 grpchttp/protobufgrpc [1]
otel.exporter.otlp.{signal}.protocol在 OTLP {signal} 请求上使用的传输协议。选项包括 grpchttp/protobufgrpc [1]
otel.exporter.otlp.endpoint将所有 OTLP traces、metrics 和 logs 发送到此端点。通常是 OpenTelemetry Collector 的地址。必须是带有 httphttps 方案的 URL,具体取决于是否使用 TLS。当协议为 grpc 时为 https://:4317,当协议为 http/protobuf 时为 https://:4318
otel.exporter.otlp.{signal}.endpoint将 OTLP {signal} 发送到此端点。通常是 OpenTelemetry Collector 的地址。必须是带有 httphttps 方案的 URL,具体取决于是否使用 TLS。如果协议为 http/protobuf,则必须将版本和信号附加到路径(例如 v1/tracesv1/metricsv1/logs)。当协议为 grpc 时为 https://:4317,当协议为 http/protobuf 时为 https://:4318/v1/{signal}
otel.exporter.otlp.certificate包含受信任证书的文件路径,用于在验证 OTLP trace、metric 或 log 服务器的 TLS 凭据时使用。该文件应包含一个或多个 PEM 格式的 X.509 证书。使用主机的平台受信任的根证书。
otel.exporter.otlp.{signal}.certificate包含受信任证书的文件路径,用于在验证 OTLP {signal} 服务器的 TLS 凭据时使用。该文件应包含一个或多个 PEM 格式的 X.509 证书。使用主机的平台受信任的根证书。
otel.exporter.otlp.client.key包含私钥的文件路径,用于在验证 OTLP trace、metric 或 log 客户端的 TLS 凭据时使用。该文件应包含一个 PKCS8 PEM 格式的私钥。不使用客户端密钥文件。
otel.exporter.otlp.{signal}.client.key包含私钥的文件路径,用于在验证 OTLP {signal} 客户端的 TLS 凭据时使用。该文件应包含一个 PKCS8 PEM 格式的私钥。不使用客户端密钥文件。
otel.exporter.otlp.client.certificate包含受信任证书的文件路径,用于在验证 OTLP trace、metric 或 log 客户端的 TLS 凭据时使用。该文件应包含一个或多个 PEM 格式的 X.509 证书。不使用证书链文件。
otel.exporter.otlp.{signal}.client.certificate包含受信任证书的文件路径,用于在验证 OTLP {signal} 服务器的 TLS 凭据时使用。该文件应包含一个或多个 PEM 格式的 X.509 证书。不使用证书链文件。
otel.exporter.otlp.headers以逗号分隔的键值对,作为请求头发送到 OTLP trace、metric 和 log 请求。
otel.exporter.otlp.{signal}.headers以逗号分隔的键值对,作为请求头发送到 OTLP {signal} 请求。
otel.exporter.otlp.compression在 OTLP trace、metric 和 log 请求上使用的压缩类型。选项包括 gzip不使用压缩。
otel.exporter.otlp.{signal}.compression在 OTLP {signal} 请求上使用的压缩类型。选项包括 gzip不使用压缩。
otel.exporter.otlp.timeout发送每个 OTLP trace、metric 和 log 批次允许的最大等待时间(以毫秒为单位)。10000
otel.exporter.otlp.{signal}.timeout发送每个 OTLP {signal} 批次允许的最大等待时间(以毫秒为单位)。10000
otel.exporter.otlp.metrics.temporality.preference首选输出聚合临时性。选项包括 DELTALOWMEMORYCUMULATIVE。如果为 CUMULATIVE,则所有 instrument 都将具有累积临时性。如果为 DELTA,则计数器(同步和异步)和直方图将为 delta,向上向下计数器(同步和异步)将为累积。如果为 LOWMEMORY,则同步计数器和直方图将为 delta,异步计数器和向上向下计数器(同步和异步)将为累积。CUMULATIVE
otel.exporter.otlp.metrics.default.histogram.aggregation首选默认直方图聚合。选项包括 BASE2_EXPONENTIAL_BUCKET_HISTOGRAMEXPLICIT_BUCKET_HISTOGRAMEXPLICIT_BUCKET_HISTOGRAM
otel.java.exporter.otlp.retry.disabled如果设置为 false,则在发生瞬时错误时重试。[2]false

注意: 文本占位符 {signal} 指的是支持的OpenTelemetry 信号。有效值包括 tracesmetricslogs。信号特定的配置优先于通用配置。例如,如果您同时设置了 otel.exporter.otlp.endpointotel.exporter.otlp.traces.endpoint,则后者将优先。

[1]:OpenTelemetry Java Agent 2.x 和 OpenTelemetry Spring Boot Starter 默认使用 http/protobuf

[2]OTLP 要求使用重试策略来处理瞬时错误。启用重试后,可重试的 gRPC 状态码将使用具有抖动的指数退避算法进行重试。RetryPolicy 的具体选项只能通过程序化自定义进行自定义。

用于 zipkin span 导出器的属性

系统属性描述默认值
otel.traces.exporter=zipkin选择 Zipkin 导出器
otel.exporter.zipkin.endpoint要连接的 Zipkin 端点。仅支持 HTTP。https://:9411/api/v2/spans

用于 prometheus metric 导出器的属性。

系统属性描述默认值
otel.metrics.exporter=prometheus选择 Prometheus 导出器
otel.exporter.prometheus.port用于绑定 Prometheus 指标服务器的本地端口。9464
otel.exporter.prometheus.host用于绑定 Prometheus 指标服务器的本地地址。0.0.0.0

程序化自定义

程序化自定义提供了钩子来通过程序化配置来补充支持的属性

如果使用Spring Starter,另请参阅Spring Starter 程序化配置

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()
        // Optionally customize TextMapPropagator.
        .addPropagatorCustomizer((textMapPropagator, configProperties) -> textMapPropagator)
        // Optionally customize Resource.
        .addResourceCustomizer((resource, configProperties) -> resource)
        // Optionally customize Sampler.
        .addSamplerCustomizer((sampler, configProperties) -> sampler)
        // Optionally customize SpanExporter.
        .addSpanExporterCustomizer((spanExporter, configProperties) -> spanExporter)
        // Optionally customize SpanProcessor.
        .addSpanProcessorCustomizer((spanProcessor, configProperties) -> spanProcessor)
        // Optionally supply additional properties.
        .addPropertiesSupplier(Collections::emptyMap)
        // Optionally customize ConfigProperties.
        .addPropertiesCustomizer(configProperties -> Collections.emptyMap())
        // Optionally customize SdkTracerProviderBuilder.
        .addTracerProviderCustomizer((builder, configProperties) -> builder)
        // Optionally customize SdkMeterProviderBuilder.
        .addMeterProviderCustomizer((builder, configProperties) -> builder)
        // Optionally customize MetricExporter.
        .addMetricExporterCustomizer((metricExporter, configProperties) -> metricExporter)
        // Optionally customize MetricReader.
        .addMetricReaderCustomizer((metricReader, configProperties) -> metricReader)
        // Optionally customize SdkLoggerProviderBuilder.
        .addLoggerProviderCustomizer((builder, configProperties) -> builder)
        // Optionally customize LogRecordExporter.
        .addLogRecordExporterCustomizer((logRecordExporter, configProperties) -> logRecordExporter)
        // Optionally customize LogRecordProcessor.
        .addLogRecordProcessorCustomizer((processor, configProperties) -> processor)
        .build()
        .getOpenTelemetrySdk();
  }
}

SPI (服务提供商接口)

SPIs (artifact io.opentelemetry:opentelemetry-sdk-extension-autoconfigure-spi:1.57.0) 将 SDK 自动配置扩展到 SDK 内置组件之外。

以下部分描述了可用的 SPI。每个 SPI 部分包括:

  • 简要描述,包括 Javadoc 类型参考链接。
  • 可用内置实现和 opentelemetry-java-contrib 实现的表格。
  • 自定义实现的简单演示。
ResourceProvider

ResourceProviders 为自动配置的资源做出贡献。

SDK 内置的以及在 opentelemetry-java-contrib 中由社区维护的 ResourceProvider

Artifact描述
io.opentelemetry.sdk.autoconfigure.internal.EnvironmentResourceProviderio.opentelemetry:opentelemetry-sdk-extension-autoconfigure:1.57.0基于 OTEL_SERVICE_NAMEOTEL_RESOURCE_ATTRIBUTES 环境变量提供资源属性。
io.opentelemetry.instrumentation.resources.ContainerResourceProviderio.opentelemetry.instrumentation:opentelemetry-resources:2.23.0-alpha提供容器资源属性。
io.opentelemetry.instrumentation.resources.HostResourceProviderio.opentelemetry.instrumentation:opentelemetry-resources:2.23.0-alpha提供主机资源属性。
io.opentelemetry.instrumentation.resources.HostIdResourceProviderio.opentelemetry.instrumentation:opentelemetry-resources:2.23.0-alpha提供主机 ID 资源属性。
io.opentelemetry.instrumentation.resources.ManifestResourceProviderio.opentelemetry.instrumentation:opentelemetry-resources:2.23.0-alpha基于 jar manifest 提供服务资源属性。
io.opentelemetry.instrumentation.resources.OsResourceProviderio.opentelemetry.instrumentation:opentelemetry-resources:2.23.0-alpha提供操作系统资源属性。
io.opentelemetry.instrumentation.resources.ProcessResourceProviderio.opentelemetry.instrumentation:opentelemetry-resources:2.23.0-alpha提供进程资源属性。
io.opentelemetry.instrumentation.resources.ProcessRuntimeResourceProviderio.opentelemetry.instrumentation:opentelemetry-resources:2.23.0-alpha提供进程运行时资源属性。
io.opentelemetry.contrib.gcp.resource.GCPResourceProviderio.opentelemetry.contrib:opentelemetry-gcp-resources:1.52.0-alpha提供 GCP 运行时环境资源属性。
io.opentelemetry.contrib.aws.resource.BeanstalkResourceProviderio.opentelemetry.contrib:opentelemetry-aws-resources:1.52.0-alpha提供 AWS beanstalk 运行时环境资源属性。
io.opentelemetry.contrib.aws.resource.Ec2ResourceProviderio.opentelemetry.contrib:opentelemetry-aws-resources:1.52.0-alpha提供 AWS ec2 运行时环境资源属性。
io.opentelemetry.contrib.aws.resource.EcsResourceProviderio.opentelemetry.contrib:opentelemetry-aws-resources:1.52.0-alpha提供 AWS ecs 运行时环境资源属性。
io.opentelemetry.contrib.aws.resource.EksResourceProviderio.opentelemetry.contrib:opentelemetry-aws-resources:1.52.0-alpha提供 AWS eks 运行时环境资源属性。
io.opentelemetry.contrib.aws.resource.LambdaResourceProviderio.opentelemetry.contrib:opentelemetry-aws-resources:1.52.0-alpha提供 AWS 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) {
    // Callback invoked to contribute to the resource.
    return Resource.builder().put("my.custom.resource.attribute", "abc123").build();
  }

  @Override
  public int order() {
    // Optionally influence the order of invocation.
    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) {
    // Optionally customize TextMapPropagator.
    customizer.addPropagatorCustomizer((textMapPropagator, configProperties) -> textMapPropagator);
    // Optionally customize Resource.
    customizer.addResourceCustomizer((resource, configProperties) -> resource);
    // Optionally customize Sampler.
    customizer.addSamplerCustomizer((sampler, configProperties) -> sampler);
    // Optionally customize SpanExporter.
    customizer.addSpanExporterCustomizer((spanExporter, configProperties) -> spanExporter);
    // Optionally customize SpanProcessor.
    customizer.addSpanProcessorCustomizer((spanProcessor, configProperties) -> spanProcessor);
    // Optionally supply additional properties.
    customizer.addPropertiesSupplier(Collections::emptyMap);
    // Optionally customize ConfigProperties.
    customizer.addPropertiesCustomizer(configProperties -> Collections.emptyMap());
    // Optionally customize SdkTracerProviderBuilder.
    customizer.addTracerProviderCustomizer((builder, configProperties) -> builder);
    // Optionally customize SdkMeterProviderBuilder.
    customizer.addMeterProviderCustomizer((builder, configProperties) -> builder);
    // Optionally customize MetricExporter.
    customizer.addMetricExporterCustomizer((metricExporter, configProperties) -> metricExporter);
    // Optionally customize MetricReader.
    customizer.addMetricReaderCustomizer((metricReader, configProperties) -> metricReader);
    // Optionally customize SdkLoggerProviderBuilder.
    customizer.addLoggerProviderCustomizer((builder, configProperties) -> builder);
    // Optionally customize LogRecordExporter.
    customizer.addLogRecordExporterCustomizer((exporter, configProperties) -> exporter);
    // Optionally customize LogRecordProcessor.
    customizer.addLogRecordProcessorCustomizer((processor, configProperties) -> processor);
  }

  @Override
  public int order() {
    // Optionally influence the order of invocation.
    return 0;
  }
}
ConfigurableSpanExporterProvider

实现 ConfigurableSpanExporterProvider 接口,以允许自定义 span 导出器参与自动配置。例如:

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) {
    // Callback invoked when OTEL_TRACES_EXPORTER includes the value from 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) {
    // Callback invoked when OTEL_METRICS_EXPORTER includes the value from 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) {
    // Callback invoked when OTEL_LOGS_EXPORTER includes the value from 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) {
    // Callback invoked when OTEL_TRACES_SAMPLER is set to the value from 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) {
    // Callback invoked when OTEL_PROPAGATORS includes the value from getName().
    return new CustomTextMapPropagator();
  }

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

声明式配置

声明式配置目前正在开发中。它允许基于 YAML 文件的配置,如 opentelemetry-configuration声明式配置中所述。

要使用,请包含 io.opentelemetry:opentelemetry-sdk-extension-incubator:1.57.0-alpha 并按照下表所述指定配置文件的路径。

系统属性目的默认值
otel.experimental.config.fileSDK 配置文件路径。Unset

有关更多详细信息,请参阅以下资源:


最后修改于 2025 年 10 月 21 日:更新 configuration.md (#8186) (ea890d02)