Warning
我们目前正在扩展本节内容以提供更多详细信息。可运行的配置文件示例可以在 Jaeger 仓库中找到。未来,所有配置属性的文档将会自动生成。
介绍
Jaeger 可以通过 YAML 配置文件进行配置,该文件使用与 OpenTelemetry Collector 相同的格式。配置定义了主要的数据摄取管道,包含一组接收器 (receivers)、处理器 (processors)、连接器 (connectors) 和导出器 (exporters)。Jaeger 实现了其中许多组件,同时也提供了一些扩展 (extensions) 来实现 Jaeger 独有的功能。
jaeger --config config.yaml
配置示例
可运行的配置文件示例可以在 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 扩展负责运行 HTTP 和 gRPC 服务器,这些服务器暴露链路追踪查询 API 和 UI 前端。未来配置文档将从模式自动生成。在此之前,请参考 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 扩展负责运行 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 收集的所有链路追踪,并动态计算不同服务和端点的采样概率,以满足特定的吞吐量目标(每秒链路追踪数)。