配置
简介
Jaeger 可以通过 YAML 配置文件进行配置,其格式与 OpenTelemetry Collector 相同。配置将主摄取管道定义为**接收器(receivers)**、**处理器(processors)**、**连接器(connectors)**和**导出器(exporters)**的集合。Jaeger 实现了许多这些组件,同时也实现了一些提供 Jaeger 独特功能的**扩展(extensions)**。
配置示例
Jaeger GitHub 仓库中提供了可用的配置示例文件
config-{storage}.yaml
是将 Jaeger 作为 `collector` 角色运行并使用不同存储后端的示例。config-query.yaml
是将 Jaeger 作为独立的 `query` 角色(带 UI)运行的示例。cmd/jaeger/internal/all-in-one.yaml
捆绑在 Jaeger 二进制文件中,用于 `all-in-one` 角色。- 其他示例展示了 SPM、尾部采样、自适应采样等附加功能。
环境变量
Jaeger v2 只能通过配置文件进行配置,它不像 Jaeger v1 那样直接识别环境变量。然而,YAML 配置的格式允许引用环境变量,这在需要时提供了一些额外的灵活性。例如,在下面的配置片段中,主机名默认为 localhost
,但可以通过 JAEGER_LISTEN_HOST
环境变量覆盖,这在容器中运行 Jaeger 且需要将其设置为 0.0.0.0
时非常有用。
receivers:
otlp:
protocols:
grpc:
endpoint: "${env:JAEGER_LISTEN_HOST:-localhost}:4317"
http:
endpoint: "${env:JAEGER_LISTEN_HOST:-localhost}:4318"
Jaeger v2 确实会自动识别一类环境变量,即那些控制 OpenTelemetry Go SDK 行为的环境变量,例如 OTEL_EXPORTER_OTLP_ENDPOINT=http://jaeger:4318
。
配置覆盖
另一种覆盖某些配置值的方法是通过 --set
命令行标志传递它们
--set=receivers.otlp.protocols.grpc.endpoint=0.0.0.0:4317
这在运行依赖内置配置的 all-in-one
角色时非常方便。
扩展
Jaeger 存储
jaeger_storage
扩展负责配置 Jaeger 其他部分使用的所有存储后端。考虑到 OpenTelemetry Collector 的典型模式是为任何特定目的地提供独立的导出器,我们可能觉得需要它有些奇怪。然而,OpenTelemetry Collector 主要关注写入数据,而 Jaeger 也允许通过 UI 和查询 API 读取数据,因此我们需要一种机制来在不同组件之间共享存储配置。jaeger_storage
扩展实现了这一点。
这是配置此扩展的示例
jaeger_storage:
backends:
some_trace_storage:
memory:
max_traces: 100000
metric_backends:
some_metrics_storage:
prometheus:
endpoint: http://prometheus:9090
normalize_calls: true
normalize_duration: true
在此示例中
backends
是一个用于追踪数据后端的字典metric_backends
是一个用于指标后端的字典some_storage
和some_metrics_storage
是赋予某些后端(可供其他组件引用)的名称memory
是一种后端类型,在此情况下为内存存储prometheus
是一种后端类型,在此情况下为 Prometheus 兼容的远程服务器
Jaeger 查询
jaeger_query
扩展负责运行 HTTP 和 gRPC 服务器,它们暴露了追踪查询 API 和 UI 前端。未来,配置文档将从 Schema 自动生成 。同时,请参考 config.go 作为权威来源。
这是配置此扩展的示例
jaeger_query:
storage:
traces: some_trace_storage
metrics: some_metrics_storage
base_path: /
ui:
config_file: /etc/jaeger/ui-config.json
log_access: true
grpc:
endpoint: 0.0.0.0:16685
http:
endpoint: 0.0.0.0:16686
这里值得注意的是 storage
部分,它通过名称引用了在 jaeger_storage
扩展中配置的存储后端。
时钟偏差调整
Jaeger 后端结合了通常运行在不同主机上的应用程序的追踪数据。主机上的硬件时钟经常发生相对漂移,这被称为时钟偏差效应 。时钟偏差会使追踪难以理解,例如,当服务器 Span 可能看起来比客户端 Span 更早开始时,这是不应该发生的。jaeger_query
扩展实现了一个时钟偏差调整算法(代码 ),利用 Span 之间的因果关系知识来纠正时钟漂移。所有调整过的 Span 都会在 UI 中显示一个警告,提供应用于其时间戳的精确时钟偏差增量。
有时这些调整本身会使追踪难以理解。例如,当在父 Span 边界内重新定位服务器 Span 时,Jaeger 不知道请求和响应延迟之间的确切关系,因此它假定它们相等并将子 Span 放置在父 Span 的中间(参见issue #961 )。
jaeger_query
扩展支持一个配置属性,用于控制允许进行多少时钟偏差调整。
extensions:
jaeger_query:
max_clock_skew_adjust: 30s
将此参数设置为零(0s
)将完全禁用时钟偏差调整。此设置适用于从给定查询服务检索到的所有追踪。目前有一个未解决的 issue #197 ,旨在支持直接在 UI 中切换调整的开启和关闭。
UI 基本路径
所有 jaeger_query
扩展 HTTP 路由的基本路径可以设置为非根值,例如 /jaeger
会使所有 UI URL 以 /jaeger
开头。这在通过反向代理运行 Jaeger 时非常有用。以下是设置基本路径的示例代码。
extensions:
jaeger_query:
base_path: /
ui:
config_file: /etc/jaeger/ui-config.json
grpc:
http:
UI 自定义
UI 的多个方面可以自定义。请参阅专门的用户界面页面。
远程采样
remote_sampling
扩展负责运行 HTTP/gRPC 服务器,这些服务器暴露了远程采样 API。
remote_sampling:
# You can either use file or adaptive sampling strategy in remote_sampling
# file:
# path: ./cmd/jaeger/sampling-strategies.json
adaptive:
sampling_store: some_store
initial_sampling_probability: 0.1
http:
grpc:
导出器
Jaeger 存储
jaeger_storage_exporter
是一个通用导出器,可用于将数据发送到 jaeger_storage
扩展中注册的任何存储后端。示例配置:
jaeger_storage_exporter:
trace_storage: some_trace_storage
queue:
num_consumers: 10
queue_size: 100
处理器
自适应采样
adaptive_sampling
处理器观察 Jaeger 收集的所有追踪,并动态计算不同服务和端点的采样概率,以满足特定的吞吐量目标(每秒追踪数量)。