配置 SDK
SDK 是 API 的内置参考实现,负责处理和导出由仪器化 API 调用产生的遥测数据。配置 SDK 以适当地处理和导出数据是集成 OpenTelemetry 到应用程序中的关键步骤。
所有 SDK 组件都具有程序化配置 API。这是配置 SDK 最灵活、最具表达力的方式。但是,更改配置需要修改代码并重新编译应用程序,并且由于 API 是用 Java 编写的,因此没有语言互操作性。
零代码 SDK 自动配置模块通过系统属性或环境变量配置 SDK 组件,并提供各种扩展点,适用于属性不足的情况。
我们建议使用零代码 SDK 自动配置模块,因为它减少了样板代码,允许在不重写代码或重新编译应用程序的情况下进行重新配置,并具有语言互操作性。
Java Agent 和 Spring Starter 会自动配置 SDK,并使用零代码 SDK 自动配置模块进行集成。所有自动配置内容都适用于 Java Agent 和 Spring Starter 用户。
以编程方式配置
程序化配置接口是用于构建 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 Agent 和 Spring Starter 会自动配置 SDK,并使用零代码 SDK 自动配置模块进行集成。所有自动配置内容都适用于 Java Agent 和 Spring Starter 用户。
自动配置模块会注册 Java 关机钩子,以便在适当的时候关闭 SDK。由于 OpenTelemetry Java 使用 java.util.logging 进行内部日志记录,因此在关机钩子期间,一些日志可能会被抑制。这是 JDK 本身的一个 bug,OpenTelemetry Java 无法控制。如果您需要在关机钩子期间记录日志,请考虑使用 System.out 而不是可能在关机钩子中自行关闭的日志框架,从而抑制您的日志消息。有关更多详细信息,请参阅此JDK bug。
环境变量和系统属性
自动配置模块支持环境变量配置规范中列出的属性,以及偶尔的实验性和 Java 特有附加项。
以下属性列为系统属性,但也可以使用环境变量设置。请按照以下步骤将系统属性转换为环境变量:
- 将名称转换为大写。
- 将所有
.和-字符替换为_。
例如,otel.sdk.disabled 系统属性等同于 OTEL_SDK_DISABLED 环境变量。
如果一个属性同时定义为系统属性和环境变量,则系统属性具有优先权。
属性:通用
用于禁用SDK的属性
| 系统属性 | 描述 | 默认值 |
|---|---|---|
otel.sdk.disabled | 如果设置为 true,则禁用 OpenTelemetry SDK。[1] | false |
[1]:如果被禁用,AutoConfiguredOpenTelemetrySdk#getOpenTelemetrySdk() 将返回一个最小配置的实例(例如,OpenTelemetrySdk.builder().build())。
| 系统属性 | 描述 | 默认值 |
|---|---|---|
otel.attribute.value.length.limit | 属性值的最大长度。适用于 span 和日志。会被 otel.span.attribute.value.length.limit、otel.span.attribute.count.limit 覆盖。 | 无限制 |
otel.attribute.count.limit | 属性的最大数量。适用于 span、span 事件、span 链接和日志。 | 128 |
属性:上下文传播
| 系统属性 | 描述 | 默认值 |
|---|---|---|
otel.propagators | 逗号分隔的传播器列表。已知值包括 tracecontext、baggage、b3、b3multi、jaeger、ottrace、xray、xray-lambda。[1] | tracecontext,baggage (W3C) |
[1]:已知传播器和 artifact(有关 artifact 坐标,请参阅文本映射传播器)
tracecontext配置W3CTraceContextPropagator。baggage配置W3CBaggagePropagator。b3、b3multi配置B3Propagator。jaeger配置JaegerPropagator。ottrace配置OtTracePropagator。xray配置AwsXrayPropagator。xray-lambda配置AwsXrayLambdaPropagator。
属性:资源
用于配置资源的属性
| 系统属性 | 描述 | 默认值 |
|---|---|---|
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]:例如,要禁用操作系统资源提供程序,请设置 -Dotel.java.disabled.resource.providers=io.opentelemetry.instrumentation.resources.OsResourceProvider。
注意:otel.service.name 和 otel.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_on、always_off、traceidratio、parentbased_always_on、parentbased_always_off、parentbased_traceidratio、jaeger_remote。[1] | parentbased_always_on |
otel.traces.sampler.arg | 如果支持,则为配置的追踪器的参数,例如比例。 |
[1]:已知采样器和 artifact(有关 artifact 坐标,请参阅采样器)
always_on配置AlwaysOnSampler。always_off配置AlwaysOffSampler。traceidratio配置TraceIdRatioBased。otel.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配置JaegerRemoteSampler。otel.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.limit。 | 128 |
otel.span.event.count.limit | 每个 span 的最大事件数量。 | 128 |
otel.span.link.count.limit | 每个 span 的最大链接数量。 | 128 |
属性:指标
用于周期性指标读取器的属性
| 系统属性 | 描述 | 默认值 |
|---|---|---|
otel.metric.export.interval | 两次导出尝试开始之间的间隔(以毫秒为单位)。 | 60000 |
属性:示例
| 系统属性 | 描述 | 默认值 |
|---|---|---|
otel.metrics.exemplar.filter | 示例采样过滤器。可以是 ALWAYS_OFF、ALWAYS_ON 或 TRACE_BASED。 | TRACE_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 导出器列表。已知值包括 otlp、zipkin、console、logging-otlp、none。[1] | otlp |
otel.metrics.exporter | 逗号分隔的指标导出器列表。已知值包括 otlp、prometheus、none。[1] | otlp |
otel.logs.exporter | 逗号分隔的日志记录导出器列表。已知值包括 otlp、console、logging-otlp、none。[1] | otlp |
otel.java.exporter.memory_mode | 如果设置为 reusable_data,则启用可重用内存模式(在支持它的导出器上)以减少内存分配。已知值包括 reusable_data、immutable_data。[2] | reusable_data |
[1]:已知导出器和 artifact(有关导出器 artifact 坐标,请参阅span 导出器、指标导出器、日志记录导出器)
otlp配置OtlpHttp{Signal}Exporter/OtlpGrpc{Signal}Exporter。zipkin配置ZipkinSpanExporter。console配置LoggingSpanExporter、LoggingMetricExporter、SystemOutLogRecordExporter。logging-otlp配置OtlpJsonLogging{Signal}Exporter。experimental-otlp/stdout配置OtlpStdout{Signal}Exporter(此选项为实验性的,可能会更改或删除)。
[2]:支持 otel.java.exporter.memory_mode=reusable_data 的导出器包括 OtlpGrpc{Signal}Exporter、OtlpHttp{Signal}Exporter、OtlpStdout{Signal}Exporter 和 PrometheusHttpServer。
用于 otlp span、metric 和 log 导出器的属性
| 系统属性 | 描述 | 默认值 |
|---|---|---|
otel.{signal}.exporter=otlp | 选择 {signal} 的 OpenTelemetry 导出器。 | |
otel.exporter.otlp.protocol | 在 OTLP trace、metric 和 log 请求上使用的传输协议。选项包括 grpc 和 http/protobuf。 | grpc [1] |
otel.exporter.otlp.{signal}.protocol | 在 OTLP {signal} 请求上使用的传输协议。选项包括 grpc 和 http/protobuf。 | grpc [1] |
otel.exporter.otlp.endpoint | 将所有 OTLP traces、metrics 和 logs 发送到此端点。通常是 OpenTelemetry Collector 的地址。必须是带有 http 或 https 方案的 URL,具体取决于是否使用 TLS。 | 当协议为 grpc 时为 https://:4317,当协议为 http/protobuf 时为 https://:4318。 |
otel.exporter.otlp.{signal}.endpoint | 将 OTLP {signal} 发送到此端点。通常是 OpenTelemetry Collector 的地址。必须是带有 http 或 https 方案的 URL,具体取决于是否使用 TLS。如果协议为 http/protobuf,则必须将版本和信号附加到路径(例如 v1/traces、v1/metrics 或 v1/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 | 首选输出聚合临时性。选项包括 DELTA、LOWMEMORY 和 CUMULATIVE。如果为 CUMULATIVE,则所有 instrument 都将具有累积临时性。如果为 DELTA,则计数器(同步和异步)和直方图将为 delta,向上向下计数器(同步和异步)将为累积。如果为 LOWMEMORY,则同步计数器和直方图将为 delta,异步计数器和向上向下计数器(同步和异步)将为累积。 | CUMULATIVE |
otel.exporter.otlp.metrics.default.histogram.aggregation | 首选默认直方图聚合。选项包括 BASE2_EXPONENTIAL_BUCKET_HISTOGRAM 和 EXPLICIT_BUCKET_HISTOGRAM。 | EXPLICIT_BUCKET_HISTOGRAM |
otel.java.exporter.otlp.retry.disabled | 如果设置为 false,则在发生瞬时错误时重试。[2] | false |
注意: 文本占位符 {signal} 指的是支持的OpenTelemetry 信号。有效值包括 traces、metrics 和 logs。信号特定的配置优先于通用配置。例如,如果您同时设置了 otel.exporter.otlp.endpoint 和 otel.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.EnvironmentResourceProvider | io.opentelemetry:opentelemetry-sdk-extension-autoconfigure:1.57.0 | 基于 OTEL_SERVICE_NAME 和 OTEL_RESOURCE_ATTRIBUTES 环境变量提供资源属性。 |
io.opentelemetry.instrumentation.resources.ContainerResourceProvider | io.opentelemetry.instrumentation:opentelemetry-resources:2.23.0-alpha | 提供容器资源属性。 |
io.opentelemetry.instrumentation.resources.HostResourceProvider | io.opentelemetry.instrumentation:opentelemetry-resources:2.23.0-alpha | 提供主机资源属性。 |
io.opentelemetry.instrumentation.resources.HostIdResourceProvider | io.opentelemetry.instrumentation:opentelemetry-resources:2.23.0-alpha | 提供主机 ID 资源属性。 |
io.opentelemetry.instrumentation.resources.ManifestResourceProvider | io.opentelemetry.instrumentation:opentelemetry-resources:2.23.0-alpha | 基于 jar manifest 提供服务资源属性。 |
io.opentelemetry.instrumentation.resources.OsResourceProvider | io.opentelemetry.instrumentation:opentelemetry-resources:2.23.0-alpha | 提供操作系统资源属性。 |
io.opentelemetry.instrumentation.resources.ProcessResourceProvider | io.opentelemetry.instrumentation:opentelemetry-resources:2.23.0-alpha | 提供进程资源属性。 |
io.opentelemetry.instrumentation.resources.ProcessRuntimeResourceProvider | io.opentelemetry.instrumentation:opentelemetry-resources:2.23.0-alpha | 提供进程运行时资源属性。 |
io.opentelemetry.contrib.gcp.resource.GCPResourceProvider | io.opentelemetry.contrib:opentelemetry-gcp-resources:1.52.0-alpha | 提供 GCP 运行时环境资源属性。 |
io.opentelemetry.contrib.aws.resource.BeanstalkResourceProvider | io.opentelemetry.contrib:opentelemetry-aws-resources:1.52.0-alpha | 提供 AWS beanstalk 运行时环境资源属性。 |
io.opentelemetry.contrib.aws.resource.Ec2ResourceProvider | io.opentelemetry.contrib:opentelemetry-aws-resources:1.52.0-alpha | 提供 AWS ec2 运行时环境资源属性。 |
io.opentelemetry.contrib.aws.resource.EcsResourceProvider | io.opentelemetry.contrib:opentelemetry-aws-resources:1.52.0-alpha | 提供 AWS ecs 运行时环境资源属性。 |
io.opentelemetry.contrib.aws.resource.EksResourceProvider | io.opentelemetry.contrib:opentelemetry-aws-resources:1.52.0-alpha | 提供 AWS eks 运行时环境资源属性。 |
io.opentelemetry.contrib.aws.resource.LambdaResourceProvider | io.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.file | SDK 配置文件路径。 | Unset |
有关更多详细信息,请参阅以下资源: