配置
简介
Jaeger 可以通过 YAML 配置文件进行配置,该文件格式与 OpenTelemetry Collector 相同。配置将主要的数据摄取管道定义为 接收器 (receivers)、处理器 (processors)、连接器 (connectors) 和 导出器 (exporters) 的集合。Jaeger 实现了许多这些组件,但也实现了一些 扩展 (extensions),提供了 Jaeger 的独特能力。
配置示例
工作配置文件的示例可在 Jaeger GitHub 仓库中找到示例工作配置文件
config-{storage}.yaml
是使用不同存储后端以collector
角色运行 Jaeger 的示例。config-query.yaml
是以独立query
角色(带 UI)运行 Jaeger 的示例。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
扩展负责运行暴露跟踪查询 API 和 UI 前端的 HTTP 和 gRPC 服务器。未来,配置文档将从 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
)将完全禁用时钟偏移调整。此设置适用于从给定查询服务检索的所有跟踪。目前有一个开放的 ticket #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
扩展负责运行暴露远程采样 API 的 HTTP/gRPC 服务器。
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 收集的所有跟踪,并动态计算不同服务和端点的采样概率,以满足特定的吞吐量目标(每秒的跟踪数量)。