Ukraine flag 我们与乌克兰的朋友和同事站在一起。如需支持正处于困难时期的乌克兰,请访问此页面。

配置

版本  2.6 最新 前往最新的 1.x 版本

简介

Jaeger 可以通过 YAML 配置文件进行配置,该文件格式与 OpenTelemetry Collectorexternal link - Jaeger 分布式追踪平台 相同。配置将主要的数据摄取管道定义为 接收器 (receivers)处理器 (processors)连接器 (connectors)导出器 (exporters) 的集合。Jaeger 实现了许多这些组件,但也实现了一些 扩展 (extensions),提供了 Jaeger 的独特能力。

配置示例

工作配置文件的示例可在 Jaeger GitHub 仓库中找到示例工作配置文件external link - Jaeger 分布式追踪平台

  • 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_storagesome_metrics_storage 是赋予特定后端的一些名称,其他组件可以引用这些名称
  • memory 是一种后端类型,此处指内存存储
  • prometheus 是一种后端类型,此处指 Prometheus 兼容的远程服务器

Jaeger 查询

jaeger_query 扩展负责运行暴露跟踪查询 API 和 UI 前端的 HTTP 和 gRPC 服务器。未来,配置文档将从 schema 自动生成external link - Jaeger 分布式追踪平台。在此期间,请参考 config.goexternal link - Jaeger 分布式追踪平台 作为权威来源。

以下是配置该扩展的示例

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 后端会合并通常运行在不同主机上的应用程序的跟踪数据。这些主机的硬件时钟经常发生相对漂移,这被称为时钟偏移效应external link - Jaeger 分布式追踪平台。时钟偏移会使理解跟踪变得困难,例如,服务器 span 可能会显示得比客户端 span 更早开始,这是不应该发生的。jaeger_query 扩展实现了一种时钟偏移调整算法(代码external link - Jaeger 分布式追踪平台),利用 span 之间的因果关系知识来纠正时钟漂移。所有经过调整的 span 都会在 UI 中显示一个警告,提供应用于其时间戳的确切时钟偏移差值。

有时这些调整本身会使跟踪难以理解。例如,在父 span 的范围内重新定位服务器 span 时,Jaeger 不知道请求和响应延迟之间的确切关系,因此它假定它们相等并将子 span 放置在父 span 的中间(参见 issue #961external link - Jaeger 分布式追踪平台)。

jaeger_query 扩展支持一个配置属性,用于控制允许进行多大程度的时钟偏移调整。

extensions:
  jaeger_query:
    max_clock_skew_adjust: 30s

将此参数设置为零(0s)将完全禁用时钟偏移调整。此设置适用于从给定查询服务检索的所有跟踪。目前有一个开放的 ticket #197external link - Jaeger 分布式追踪平台,旨在支持直接在 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 收集的所有跟踪,并动态计算不同服务和端点的采样概率,以满足特定的吞吐量目标(每秒的跟踪数量)。