Ukraine flag 我们与乌克兰的朋友和同事同在。如需在他们需要时支持乌克兰,请访问此页面

配置

版本  2.8 最新

简介

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

配置示例

Jaeger GitHub 仓库中提供了可用的配置示例文件external link - Jaeger 分布式追踪平台

  • 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_storagesome_metrics_storage 是赋予某些后端(可供其他组件引用)的名称
  • memory 是一种后端类型,在此情况下为内存存储
  • prometheus 是一种后端类型,在此情况下为 Prometheus 兼容的远程服务器

Jaeger 查询

jaeger_query 扩展负责运行 HTTP 和 gRPC 服务器,它们暴露了追踪查询 API 和 UI 前端。未来,配置文档将从 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)将完全禁用时钟偏差调整。此设置适用于从给定查询服务检索到的所有追踪。目前有一个未解决的 issue #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 扩展负责运行 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 收集的所有追踪,并动态计算不同服务和端点的采样概率,以满足特定的吞吐量目标(每秒追踪数量)。