环境变量规范

状态稳定,除非另有说明

本规范的目的是统一不同 OpenTelemetry 实现之间的环境变量名称和值解析。

实现 MAY 选择通过本规范中的环境变量进行配置,但并非必需。如果选择这样做,它们 SHOULD 使用本文档中指定的名称和值解析行为。它们还 SHOULD 遵循 通用配置规范

实施指南

环境变量 MAY 由组件直接处理(实现),在 SDK 中处理,或者在单独的组件中处理(例如,基于环境的自动配置组件)。

基于环境的配置 MUST 有一个直接的代码配置等效项。

解析空值

SDK 必须将环境变量的空值解释为未设置该变量时的情况。

特定类型指导

布尔值

任何代表布尔值的值,只有在不区分大小写的字符串 "true" 时才被设置为 true,这意味着 "True""TRUE" 也被接受为 true。实现 MUST 不会扩展此定义并定义解释为 true 的其他值。任何未在此处明确定义为 true 值的值,包括未设置和空值,MUST 被解释为 false。如果使用非 true 值(不区分大小写的字符串 "false"、空值或未设置值)以外的任何值,则 SHOULD 记录警告,以告知用户已应用回退到 false。所有布尔环境变量 SHOULD 被命名和定义,使得 false 是预期的安全默认行为。重命名或更改默认值 MUST 不会在 major 版本升级前发生。

数值

以下指导适用于所有数值类型,并扩展了 通用配置规范“数值”指导

在稳定化之后添加了以下段落,因此要求被限定为“SHOULD”,以允许实现避免破坏性更改。对于新的实现,这些应该被视为 MUST 要求。

对于接受数值的变量,如果用户提供了一个实现无法解析的值,实现 SHOULD 生成一个警告并优雅地忽略该设置,即将其视为未设置。

字符串

字符串值被细分为

枚举

以下指导扩展了 通用配置规范“枚举”指导

枚举值 SHOULD 被不区分大小写地解释。

对于接受枚举值的源,如果用户提供的值是实现不认识的,实现 MUST 生成一个警告并优雅地忽略该设置。

通用 SDK 配置

名称描述默认值类型注意
OTEL_SDK_DISABLED禁用所有信号的 SDKfalse布尔值如果为“true”,则将为所有遥测信号使用无操作(no-op)的 SDK 实现。任何其他值或变量的缺失将没有影响,SDK 将保持启用状态。此设置对通过 OTEL_PROPAGATORS 变量配置的 propagators 没有影响。
OTEL_ENTITIES要与资源关联的实体信息字符串有关更多详细信息,请参阅 Entities SDK
OTEL_RESOURCE_ATTRIBUTES用作资源属性的键值对有关详细信息,请参阅 资源语义约定字符串有关更多详细信息,请参阅 Resource SDK
OTEL_SERVICE_NAME设置 service.name 资源属性的值字符串如果 service.name 也通过 OTEL_RESOURCE_ATTRIBUTES 提供,则 OTEL_SERVICE_NAME 具有优先权。
OTEL_LOG_LEVELSDK 内部日志记录器 使用的日志级别“info”枚举
OTEL_PROPAGATORS用作逗号分隔列表的 Propagators“tracecontext,baggage”枚举值 MUST 被去重,以便只注册一次 Propagator
OTEL_TRACES_SAMPLER用于 traces 的 Sampler“parentbased_always_on”枚举请参阅 Sampling
OTEL_TRACES_SAMPLER_ARG用作 Sampler 参数的值参见脚注指定的 Value 仅在设置了 OTEL_TRACES_SAMPLER 时使用。每种 Sampler 类型定义了其自己的预期输入(如果有)。无效或未识别的输入 MUST 被记录,并且 MUST 被忽略,即实现 MUST 的行为如同 OTEL_TRACES_SAMPLER_ARG 未设置一样。

OTEL_PROPAGATORS 的已知值包括

OTEL_TRACES_SAMPLER 的已知值包括

  • "always_on"AlwaysOnSampler
  • "always_off"AlwaysOffSampler
  • "traceidratio"TraceIdRatioBased
  • "parentbased_always_on"ParentBased(root=AlwaysOnSampler)
  • "parentbased_always_off"ParentBased(root=AlwaysOffSampler)
  • "parentbased_traceidratio"ParentBased(root=TraceIdRatioBased)
  • "parentbased_jaeger_remote"ParentBased(root=JaegerRemoteSampler)
  • "jaeger_remote"JaegerRemoteSampler
  • "xray"AWS X-Ray 集中采样 (第三方)

根据 OTEL_TRACES_SAMPLER 的值,OTEL_TRACES_SAMPLER_ARG 可以设置如下

  • 对于 traceidratioparentbased_traceidratio samplers:采样概率,范围在 [0..1] 内的数字,例如“0.25”。如果未设置,默认为 1.0。
  • 对于 jaeger_remoteparentbased_jaeger_remote:该值是一个逗号分隔的列表
    • endpoint: 格式为 scheme://host:port 的 gRPC 服务器端点,该服务器提供服务的采样策略(sampling.proto)。
    • pollingIntervalMs:以毫秒为单位,表示采样器轮询后端以获取采样策略更新的频率。
    • initialSamplingRate:在 [0..1] 范围内的值,当后端无法访问以检索采样策略时,用作采样概率。一旦成功检索到采样策略,此值将不再生效,因为将使用远程策略,直到检索到新的更新。
    • 示例: endpoint=https://:14250,pollingIntervalMs=5000,initialSamplingRate=0.25

批量 Span Processor

名称描述默认值类型注意
OTEL_BSP_SCHEDULE_DELAY两次连续导出之间的延迟间隔(以毫秒为单位)5000Duration
OTEL_BSP_EXPORT_TIMEOUT导出数据允许的最大时间(以毫秒为单位)30000超时
OTEL_BSP_MAX_QUEUE_SIZE最大队列大小2048整数有效值为正数。
OTEL_BSP_MAX_EXPORT_BATCH_SIZE最大批次大小512整数必须小于或等于 OTEL_BSP_MAX_QUEUE_SIZE。有效值为正数。

批量 LogRecord Processor

名称描述默认值类型注意
OTEL_BLRP_SCHEDULE_DELAY两次连续导出之间的延迟间隔(以毫秒为单位)1000Duration
OTEL_BLRP_EXPORT_TIMEOUT导出数据允许的最大时间(以毫秒为单位)30000超时
OTEL_BLRP_MAX_QUEUE_SIZE最大队列大小2048整数有效值为正数。
OTEL_BLRP_MAX_EXPORT_BATCH_SIZE最大批次大小512整数必须小于或等于 OTEL_BLRP_MAX_QUEUE_SIZE。有效值为正数。

属性限制

Implementations SHOULD only offer environment variables for the types of attributes, for which that SDK implements truncation mechanism.

有关限制的定义,请参阅 SDK 的 Attribute Limits 部分。

名称描述默认值类型注意
OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT允许的最大属性值大小无限制整数有效值为非负数。
OTEL_ATTRIBUTE_COUNT_LIMIT允许的最大属性数量128整数有效值为非负数。

Span 限制

有关限制的定义,请参阅 SDK 的 Span Limits 部分。

名称描述默认值类型注意
OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT允许的最大属性值大小无限制整数有效值为非负数。
OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT允许的最大 Span 属性数量128整数有效值为非负数。
OTEL_SPAN_EVENT_COUNT_LIMIT允许的最大 Span 事件数量128整数有效值为非负数。
OTEL_SPAN_LINK_COUNT_LIMIT允许的最大 Span 链接数量128整数有效值为非负数。
OTEL_EVENT_ATTRIBUTE_COUNT_LIMIT每个 Span 事件允许的最大属性数量128整数有效值为非负数。
OTEL_LINK_ATTRIBUTE_COUNT_LIMIT每个 Span 链接允许的最大属性数量128整数有效值为非负数。

LogRecord 限制

有关限制的定义,请参阅 SDK 的 LogRecord Limits 部分。

名称描述默认值类型注意
OTEL_LOGRECORD_ATTRIBUTE_VALUE_LENGTH_LIMIT允许的最大属性值大小无限制整数有效值为非负数。
OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT允许的最大 LogRecord 属性数量128整数有效值为非负数。

OTLP Exporter

请参阅 OpenTelemetry Protocol Exporter 配置选项

Zipkin Exporter

状态已弃用

名称描述默认值类型
OTEL_EXPORTER_ZIPKIN_ENDPOINTZipkin traces 的端点https://:9411/api/v2/spans字符串
OTEL_EXPORTER_ZIPKIN_TIMEOUTZipkin exporter 在每次批量导出时等待的最大时间(以毫秒为单位)10000超时

此外,以下环境变量保留供 Zipkin Exporter 配置在未来使用

  • OTEL_EXPORTER_ZIPKIN_PROTOCOL

这将用于指定导出器是使用 v1 还是 v2,json、thrift 或 protobuf。截至 1.0 规范,没有指定的默认值,也没有通过环境变量进行配置

Prometheus Exporter

状态: 开发中

名称描述默认值类型
OTEL_EXPORTER_PROMETHEUS_HOSTPrometheus exporter 使用的主机“localhost”字符串
OTEL_EXPORTER_PROMETHEUS_PORTPrometheus exporter 使用的端口9464整数

Exporter 选择

我们定义了用于为每个信号设置一个或多个 exporter 的环境变量。

名称描述默认值类型
OTEL_TRACES_EXPORTER要使用的 Trace exporter“otlp”枚举
OTEL_METRICS_EXPORTER要使用的 Metrics exporter“otlp”枚举
OTEL_LOGS_EXPORTER要使用的 Logs exporter“otlp”枚举

实现 MAY 接受逗号分隔的列表以启用设置多个 exporter。

OTEL_TRACES_EXPORTER 的已知值包括

  • "otlp"OTLP
  • "zipkin"Zipkin (默认为 protobuf 格式)
  • "console"标准输出
  • "logging"标准输出。这是一个为向后兼容而保留的已弃用值。新实现 SHOULD 不支持它。
  • "none": 无自动配置的 trace exporter。

OTEL_METRICS_EXPORTER 的已知值包括

  • "otlp"OTLP
  • "prometheus"Prometheus
  • "console"标准输出
  • "logging"标准输出。这是一个为向后兼容而保留的已弃用值。新实现 SHOULD 不支持它。
  • "none": 无自动配置的 metrics exporter。

OTEL_LOGS_EXPORTER 的已知值包括

  • "otlp"OTLP
  • "console"标准输出
  • "logging"标准输出。这是一个为向后兼容而保留的已弃用值。新实现 SHOULD 不支持它。
  • "none": 无自动配置的 logs exporter。

开发中 Exporter 选择

状态: 开发中

除了上述之外,还为开发中的 Exporter 选择添加了以下环境变量

OTEL_TRACES_EXPORTER 的其他已知值包括

OTEL_METRICS_EXPORTER 的其他已知值包括

OTEL_LOGS_EXPORTER 的其他已知值包括

Metrics SDK 配置

Exemplar

名称描述默认值类型
OTEL_METRICS_EXEMPLAR_FILTER过滤哪些测量值可以成为 Exemplars。"trace_based"枚举

OTEL_METRICS_EXEMPLAR_FILTER 的已知值包括

定期导出 MetricReader

用于推送式 metrics exporter(OTLP、stdout、in-memory)的特定环境变量,这些 exporter 使用 periodic exporting MetricReader

名称描述默认值类型
OTEL_METRIC_EXPORT_INTERVAL两次导出尝试之间的间隔时间(以毫秒为单位)。60000Duration
OTEL_METRIC_EXPORT_TIMEOUT导出数据允许的最大时间(以毫秒为单位)。30000超时

声明式配置

状态: 开发中

涉及 声明式配置 的环境变量。

名称描述默认值类型注意
OTEL_EXPERIMENTAL_CONFIG_FILE用于配置 SDK 的配置文件路径。如果设置,此文件中的配置将优先于所有其他 SDK 配置环境变量。字符串见下文

如果设置了 OTEL_EXPERIMENTAL_CONFIG_FILE,则使用指定路径的文件来调用 Parse。生成的 配置模型 用于调用 Create 以生成完全配置的 SDK 组件。

当设置 OTEL_EXPERIMENTAL_CONFIG_FILE 时,除了配置文件中用于 环境变量替换 的变量之外,所有其他环境变量都将被忽略。忽略环境变量是必要的,因为在所有情况下,没有直观的方法可以将扁平的环境变量方案与结构化的文件配置方案合并。鼓励需要合并多个配置源的用户在调用 Create 之前定制 Parse 返回的配置模型。例如,用户可以解析多个文件,并定义合并生成的配置模型的逻辑,或者将环境变量的值覆盖在配置模型之上。实现 MAY 提供一种机制来定制从 OTEL_EXPERIMENTAL_CONFIG_FILE 解析的配置模型。

鼓励用户使用 sdk-migration-config.yaml 作为 OTEL_EXPERIMENTAL_CONFIG_FILE 的起点。此文件代表常见的 SDK 配置场景,并包含对环境变量引用的环境变量替换,这些变量否则会被忽略。或者,sdk-config.yaml 提供了一个常见的 SDK 配置起点,没有环境变量替换引用。

TODO:弃用不兼容的环境变量(#3967

语言特定环境变量

为了确保跨项目的命名一致性,本规范建议语言特定的环境变量使用以下约定形成

OTEL_{LANGUAGE}_{FEATURE}