Java 代理声明式配置
声明式配置使用 YAML 文件,而非环境变量或系统属性。
这种方法在以下情况下非常有用:
- 你需要设置许多配置选项。
- 你想使用环境变量或系统属性中不可用的配置选项。
与环境变量一样,配置语法与语言无关,适用于所有支持声明式配置的 OpenTelemetry Java SDK,包括 OpenTelemetry Java 代理。
警告
声明式配置是实验性功能。
支持版本
声明式配置在 OpenTelemetry Java 代理版本 2.20.0 及更高版本中受支持。
快速开始
将下面的配置文件保存为
otel-config.yaml。将以下内容添加到你的 JVM 启动参数中:
-Dotel.experimental.config.file=/path/to/otel-config.yaml
参考 SDK 声明式配置文档,获取更通用的声明式配置入门指南。
本页重点介绍 OpenTelemetry Java 代理 的声明式配置。
配置选项的映射
当你希望将现有的有的环境变量或系统属性配置映射为声明式配置时,请遵循以下规则:
- 如果配置选项以
otel.javaagent.开头(例如otel.javaagent.logging),那么它很可能是只能通过环境变量或系统属性设置的属性(有关详细信息,请参阅下面的仅限环境变量和系统属性的选项部分)。 否则,移除otel.javaagent.前缀,并将其放置在下方的agent配置段中。 - 如果配置选项以
otel.instrumentation.开头(例如otel.instrumentation.spring-batch.experimental.chunk.new-trace),那么去掉otel.instrumentation.前缀,并将其放在下面的instrumentation部分下。 - 否则,该选项很可能属于 SDK 配置。在迁移配置中查找对应的环境变量或系统属性。
如果有一个系统属性像
otel.bsp.schedule.delay,那么在迁移配置中查找对应的环境变量OTEL_BSP_SCHEDULE_DELAY。 - 使用
.创建缩进级别。 - 将
-转换为_。 - 根据需要使用 YAML 布尔值和整数类型(例如
true而不是"true",5000而不是"5000")。 - 下面列出了一些特殊映射的选项。
instrumentation/development:
general:
peer:
service_mapping: # 原配置项为 "otel.instrumentation.common.peer-service-mapping"
- peer: 1.2.3.4
service: FooService
- peer: 2.3.4.5
service: BarService
http:
client:
request_captured_headers: # 原配置项为 otel.instrumentation.http.client.capture-request-headers
- Content-Type
- Accept
response_captured_headers: # 原配置项为 otel.instrumentation.http.client.capture-response-headers
- Content-Type
- Content-Encoding
server:
request_captured_headers: # 原配置项为 otel.instrumentation.http.server.capture-request-headers
- Content-Type
- Accept
response_captured_headers: # 原配置项为 otel.instrumentation.http.server.capture-response-headers
- Content-Type
- Content-Encoding
java:
agent:
# 原配置项为 otel.instrumentation.common.default-enabled
# instrumentation_mode: none # 原为 false
instrumentation_mode: default # 原为 true
spring_batch:
experimental:
chunk:
new_trace: true
仅适用于环境变量和系统属性的选项
以下配置选项虽受声明式配置支持,但仅能通过环境变量或系统属性进行设置:
otel.javaagent.configuration-file(但使用声明式配置时不需要设置该选项)otel.javaagent.debugotel.javaagent.enabledotel.javaagent.experimental.field-injection.enabledotel.javaagent.experimental.security-manager-support.enabledotel.javaagent.extensionsotel.javaagent.logging.application.logs-buffer-max-recordsotel.javaagent.logging
这些选项在代理启动时需要在读取声明式配置文件之前设置。
时长格式
- 声明式配置仅支持以毫秒为单位的时长(例如,5 秒表示为
5000)。 - 如果你使用
OTEL_BSP_SCHEDULE_DELAY=5s,将会出现错误(该格式对环境变量有效,但对声明式配置无效)。
示例:
tracer_provider:
processors:
- batch:
schedule_delay: ${OTEL_BSP_SCHEDULE_DELAY:-5000}
行为差异
- 资源属性
telemetry.distro.name(默认由 Java 代理添加)的值为opentelemetry-javaagent, 而不是opentelemetry-java-instrumentation(将在 3.0 版本中与 Java 代理保持一致)。
未支持的功能
一些通过环境变量和系统属性支持的功能尚未被声明式配置支持:
以下设置仍需通过环境变量或系统属性进行设置:
otel.experimental.javascript-snippetotel.instrumentation.aws-sdk.experimental-record-individual-http-errorotel.instrumentation.aws-sdk.experimental-span-attributesotel.instrumentation.aws-sdk.experimental-use-propagator-for-messagingotel.instrumentation.common.db-statement-sanitizer.enabledotel.instrumentation.common.logging.span-idotel.instrumentation.common.logging.trace-flagsotel.instrumentation.common.logging.trace-idotel.instrumentation.experimental.span-suppression-strategyotel.instrumentation.genai.capture-message-contentotel.instrumentation.jdbc.experimental.capture-query-parametersotel.instrumentation.jdbc.experimental.transaction.enabledotel.instrumentation.log4j-context-data.add-baggageotel.instrumentation.messaging.experimental.capture-headersotel.instrumentation.messaging.experimental.receive-telemetry.enabledotel.javaagent.experimental.thread-propagation-debugger.enabledotel.semconv-stability.opt-in
Java 代理中尚未被声明式配置支持的功能:
otel.instrumentation.common.mdc.resource-attributesotel.javaagent.add-thread-details- 当
otel.javaagent.debug=true时,为 Span 添加控制台日志记录器- 可以通过在配置文件中添加用于输出 Span 信息的控制台日志记录器。
- 使用
GlobalConfigProvider在自定义代码中访问声明式配置值
Java SDK 中尚未被声明式配置支持的功能:
- 在
AutoConfiguredOpenTelemetrySdk中调用AutoConfigureListener
Contrib 中尚未被声明式配置支持的功能:
最后,Spring Boot 启动器尚不支持声明式配置:
- 但是,你已经可以使用
application.yaml来配置 OpenTelemetry Spring Boot 启动器
意见反馈
这个页面对您有帮助吗?
Thank you. Your feedback is appreciated!
Please let us know how we can improve this page. Your feedback is appreciated!