乌克兰国旗 我们与乌克兰的朋友和同事站在一起。 为了支持乌克兰渡过难关 请访问此页面.

部署

版本  1.62 最新

另请参阅


主要的 Jaeger 后端组件以 Docker 镜像的形式发布在 Docker Hubexternal linkQuayexternal link 上。

组件Docker HubQuay
jaeger-all-in-onehub.docker.com/r/jaegertracing/all-in-one/external linkquay.io/repository/jaegertracing/all-in-oneexternal link
jaeger-agenthub.docker.com/r/jaegertracing/jaeger-agent/external linkquay.io/repository/jaegertracing/jaeger-agentexternal link
jaeger-collectorhub.docker.com/r/jaegertracing/jaeger-collector/external linkquay.io/repository/jaegertracing/jaeger-collectorexternal link
jaeger-queryhub.docker.com/r/jaegertracing/jaeger-query/external linkquay.io/repository/jaegertracing/jaeger-queryexternal link
jaeger-ingesterhub.docker.com/r/jaegertracing/jaeger-ingester/external linkquay.io/repository/jaegertracing/jaeger-ingester外部链接
jaeger-remote-storagehub.docker.com/r/jaegertracing/jaeger-remote-storage/外部链接quay.io/repository/jaegertracing/jaeger-remote-storage外部链接

以上列出的镜像是主要发布版本。大多数组件发布了额外的镜像

  • ${component}-debug 镜像包含 Delve 调试器
  • ${component}-snapshot 镜像从主分支的顶端发布,针对每次提交,允许测试未发布的版本
  • ${component}-debug-snapshot 包含 Delve 调试器的快照镜像

使用以下方法运行 Jaeger 有编排模板

配置选项

Jaeger 二进制文件可以通过多种方式配置(按优先级降序排列)

  • 命令行参数
  • 环境变量
  • JSON、TOML、YAML、HCL 或 Java 属性格式的配置文件。

要查看所有选项列表,请使用 help 命令运行二进制文件,或参阅 CLI 标志 页面了解更多信息。特定于某个存储后端的选项 *只有在选择了存储类型时才会列出*。例如,要查看 Collector 中所有可用的选项,并使用 Cassandra 存储

$ docker run --rm \
    -e SPAN_STORAGE_TYPE=cassandra \
    jaegertracing/jaeger-collector:1.62.0 \
    help

为了通过环境变量提供配置参数,请找到相应的命令行选项,并将其名称转换为 UPPER_SNAKE_CASE,例如

命令行选项环境变量
--cassandra.connections-per-hostCASSANDRA_CONNECTIONS_PER_HOST
--metrics-backendMETRICS_BACKEND

一体化

Jaeger 一体化是一个特殊的分布,它将三个 Jaeger 组件 agentcollector查询服务/UI 组合在一个二进制文件或容器镜像中。它适用于单节点部署,在这些部署中,您的跟踪量足够轻,可以由单个实例处理。默认情况下,一体化以 memory 存储启动,这意味着它将在重启后丢失所有数据。所有其他 跨度存储后端 也可以与一体化一起使用,但 memorybadger 是一体化专用的,因为它们不能在实例之间共享。

一体化侦听与其包含的组件相同的端口(如下所述),但管理端口除外。

端口协议功能
14269HTTP管理端口:健康检查位于 /,指标位于 /metrics
## make sure to expose only the ports you use in your deployment scenario!
docker run -d --name jaeger \
  -e COLLECTOR_OTLP_ENABLED=true \
  -e COLLECTOR_ZIPKIN_HOST_PORT=:9411 \
  -p 5775:5775/udp \
  -p 6831:6831/udp \
  -p 6832:6832/udp \
  -p 5778:5778 \
  -p 16686:16686 \
  -p 14250:14250 \
  -p 14268:14268 \
  -p 14269:14269 \
  -p 4317:4317 \
  -p 4318:4318 \
  -p 9411:9411 \
  jaegertracing/all-in-one:1.62.0

您可以导航到 https://127.0.0.1:16686 访问 Jaeger UI。

代理

jaeger-agent 已弃用外部链接。OpenTelemetry 数据可以从 OpenTelemetry SDK(配备 OTLP 导出器)直接发送到 jaeger-collector。有关替代部署选项,请参阅 架构 页面。

jaeger-agent 旨在接收通过 UDP 以 Thrift 格式传输的跟踪数据,并在每个主机上本地运行,作为主机代理/守护程序或应用程序边车。jaeger-agent 公开以下端口

端口协议功能
6831UDP接受 jaeger.thrift外部链接compact Thrift 协议,大多数当前 Jaeger 客户端使用此协议。
6832UDP接受 jaeger.thrift外部链接binary Thrift 协议,由 Node.js Jaeger 客户端使用(因为 thriftrw外部链接 npm 包不支持 compact 协议)。
5778HTTP提供 SDK 配置,即采样策略位于 /sampling(请参阅 远程采样)。
5775UDP接受 zipkin.thrift外部链接compact Thrift 协议(已弃用;仅由非常旧的 Jaeger 客户端使用,大约在 2016 年)。
14271HTTP管理端口:健康检查位于 /,指标位于 /metrics

它可以直接在主机上或通过 Docker 执行,如下所示

## make sure to expose only the ports you use in your deployment scenario!
docker run \
  --rm \
  -p6831:6831/udp \
  -p6832:6832/udp \
  -p5778:5778/tcp \
  -p5775:5775/udp \
  jaegertracing/jaeger-agent:1.62.0

发现系统集成

jaeger-agent 可以点对点连接到单个 jaeger-collector 地址,该地址可以由另一个基础设施组件(例如 DNS)跨多个 jaeger-collector 进行负载平衡。jaeger-agent 也可以配置为使用 jaeger-collector 地址的静态列表。

在 Docker 上,可以使用以下命令

docker run \
  --rm \
  -p5775:5775/udp \
  -p6831:6831/udp \
  -p6832:6832/udp \
  -p5778:5778/tcp \
  jaegertracing/jaeger-agent:1.62.0 \
  --reporter.grpc.host-port=jaeger-collector.jaeger-infra.svc:14250

使用 gRPC 时,您有多种负载平衡和名称解析选项

  • 单个连接,无负载平衡。如果您指定单个 host:port,则为默认值。(例如:--reporter.grpc.host-port=jaeger-collector.jaeger-infra.svc:14250
  • 主机名的静态列表和循环负载平衡。这是您在使用以逗号分隔的地址列表时获得的内容。(例如:reporter.grpc.host-port=jaeger-collector1:14250,jaeger-collector2:14250,jaeger-collector3:14250
  • 动态 DNS 解析和轮询负载均衡。要获得此行为,请在地址前加 dns:///,gRPC 将尝试使用 SRV 记录(针对 外部负载均衡external link ) 、TXT 记录(针对 服务配置external link ) 和 A 记录。有关更多信息,请参阅 gRPC 命名解析文档external linkdns_resolver.go 实现external link 。(示例:--reporter.grpc.host-port=dns:///jaeger-collector.jaeger-infra.svc:14250

Agent 级标签

Jaeger 支持 Agent 级标签,这些标签可以添加到所有经过 jaeger-agent 的跨度的进程标签中。这可以通过命令行标志 --agent.tags=key1=value1,key2=value2,...,keyn=valuen 来支持。标签也可以通过环境标志设置,如下所示 - --agent.tags=key=${envFlag:defaultValue} - 标签值将设置为 envFlag 环境键的值,如果未设置则设置为 defaultValue

收集器

jaeger-collector 是无状态的,因此可以并行运行 jaeger-collector 的多个实例。jaeger-collector 几乎不需要配置,除了存储位置,例如 --cassandra.keyspace--cassandra.servers 选项,或者 Elasticsearch 集群的位置,通过 --es.server-urls,具体取决于指定了哪个存储。有关所有命令行选项,请参阅 CLI 标志

在默认设置下,jaeger-collector 公开了以下端口

端口协议端点功能
4317gRPCn/a接受 OpenTelemetry OTLP 格式external link (Protobuf)的跟踪。
4318HTTP/v1/traces接受 OpenTelemetry OTLP 格式external link (Protobuf 和 JSON)的跟踪。
14268HTTP/api/sampling提供采样策略(参见 远程采样 )。
/api/traces接受使用 binary thrift 协议(POST)的 jaeger.thriftexternal link 格式的跨度。
14269HTTP/管理端口:健康检查(GET)。
/metricsPrometheus 风格的指标(GET)。
9411HTTP/api/v1/spans/api/v2/spans接受 Thrift、JSON 和 Proto 中的 Zipkin 跨度(默认情况下禁用)。
14250gRPCn/ajaeger-agent 用于发送使用 model.protoexternal link Protobuf 格式的跨度。

摄取器

jaeger-ingester 是一种服务,它从 Kafka 主题读取跨度数据并将其写入另一个存储后端(Elasticsearch 或 Cassandra)。

端口协议功能
14270HTTP管理端口:健康检查位于 /,指标位于 /metrics

要查看所有公开的配置选项,请运行以下命令

docker run \
  -e SPAN_STORAGE_TYPE=cassandra \
  jaegertracing/jaeger-ingester:1.62.0
  --help

查询服务和 UI

jaeger-query 提供 API 端点和一个 React/Javascript UI。该服务是无状态的,通常在负载均衡器(例如 NGINXexternal link ) 后运行。

在默认设置下,jaeger-query 服务公开了以下端口(端口)

端口协议功能
16685gRPCProtobuf/gRPC QueryServiceexternal link
16686HTTP/api/* 端点和 Jaeger UI 在 /
16687HTTP管理端口:健康检查位于 /,指标位于 /metrics

最小部署示例(Elasticsearch 后端)

docker run -d --rm \
  -p 16685:16685 \
  -p 16686:16686 \
  -p 16687:16687 \
  -e SPAN_STORAGE_TYPE=elasticsearch \
  -e ES_SERVER_URLS=http://<ES_SERVER_IP>:<ES_SERVER_PORT> \
  jaegertracing/jaeger-query:1.62.0

时钟偏差调整

Jaeger 后端结合了通常在不同主机上运行的应用程序的跟踪数据。主机上的硬件时钟经常发生相对漂移,称为 时钟偏差效应external link 。时钟偏差会使跟踪难以推理,例如,当服务器跨度似乎比客户端跨度更早开始时,这应该是不可行的。jaeger-query 服务实现了时钟偏差调整算法( 代码external link ) 来校正时钟漂移,利用跨度之间因果关系的知识。所有调整的跨度在 UI 中都显示警告,其中提供了应用于其时间戳的精确时钟偏差增量。

有时,这些调整本身会使跟踪难以理解。例如,在将服务器跨度重新放置在其父跨度的边界内时,Jaeger 不知道请求和响应延迟之间的确切关系,因此它假设它们相等并将子跨度放置在父跨度的中间(参见 问题 #961external link )。

jaeger-query 服务支持一个配置标志 --query.max-clock-skew-adjustment,用于控制允许的时钟偏差调整量。将此参数设置为零 (0s) 将完全禁用时钟偏差调整。此设置适用于从给定查询服务检索的所有跟踪。有一个正在进行的 工单 #197外部链接 用于支持直接在 UI 中切换调整的开启和关闭。

UI 基本路径

所有 jaeger-query HTTP 路由的基本路径可以设置为非根值,例如 /jaeger 将导致所有 UI URL 以 /jaeger 开头。当在反向代理后面运行 jaeger-query 时,这将很有用。

基本路径可以通过 --query.base-path 命令行参数或 QUERY_BASE_PATH 环境变量配置。

UI 自定义和嵌入

请参考 专门的前端/UI 页面

远程存储 (组件)

jaeger-remote-storage 实现 远程存储 gRPC API外部链接 并将其代理到一个常规的 Jaeger 后端。当我们想要运行 Jaeger 组件的完整部署(例如,单独的收集器和查询服务)但使用单节点存储后端(如内存存储或 Badger)时,这将很有用。如果没有远程存储,单节点后端只能与一体式一起使用,因为它们不能在多个进程之间共享。

在默认设置下,服务监听以下端口(s)

端口协议功能
17271gRPC远程存储 API外部链接
17270HTTP管理端口:健康检查位于 /,指标位于 /metrics

跨度存储后端

Jaeger 需要一个持久存储后端。Cassandra 和 Elasticsearch/OpenSearch 是主要支持的分布式存储后端。其他后端 在此处讨论外部链接

存储类型可以通过 SPAN_STORAGE_TYPE 环境变量传递。有效值为 cassandraelasticsearchkafka(仅作为缓冲区)、badgermemory

从 1.6.0 版本开始,可以通过将有效类型的逗号分隔列表提供给 SPAN_STORAGE_TYPE 环境变量,在同一时间使用多种存储类型。重要的是要注意,所有列出的存储类型都用于写入,但列表中的第一个类型将仅用于读取和归档。

对于大规模生产部署,Jaeger 团队 建议使用 OpenSearch 后端而不是 Cassandra

内存

内存存储不适用于生产工作负载。它旨在作为一种简单的解决方案,可以快速入门,并且数据将在进程退出后丢失。

默认情况下,内存中存储的跟踪数量没有限制,但可以通过 --memory.max-traces 传递整数值来设置限制。

Badger - 本地存储

  • 自 Jaeger v1.9

Badger外部链接 是一个嵌入式本地存储,仅适用于 一体式 分发。默认情况下,它充当使用临时文件系统的短暂存储。这可以通过使用 --badger.ephemeral=false 选项来覆盖。

docker run \
  -e SPAN_STORAGE_TYPE=badger \
  -e BADGER_EPHEMERAL=false \
  -e BADGER_DIRECTORY_VALUE=/badger/data \
  -e BADGER_DIRECTORY_KEY=/badger/key \
  -v <storage_dir_on_host>:/badger \
  -p 16686:16686 \
  jaegertracing/all-in-one:1.62.0

Cassandra

  • 支持的版本:4.x、5.x

部署 Cassandra 本身不在我们文档的范围之内。一个很好的文档来源是 Apache Cassandra 文档外部链接

配置

最小
docker run \
  -e SPAN_STORAGE_TYPE=cassandra \
  -e CASSANDRA_SERVERS=<...> \
  jaegertracing/jaeger-collector:1.62.0

注意:CASSANDRA_SERVERS 中允许使用空格字符。例如:服务器可以作为 CASSANDRA_SERVERS=“1.2.3.4, 5.6.7.8” 传递以提高可读性。

所有选项

要查看配置选项的完整列表,您可以运行以下命令

docker run \
  -e SPAN_STORAGE_TYPE=cassandra  \
  jaegertracing/jaeger-collector:1.62.0 \
  --help

模式脚本

提供了一个脚本,用于使用 Cassandra 的交互式 shell cqlsh外部链接 初始化 Cassandra keyspace 和模式

MODE=test sh ./plugin/storage/cassandra/schema/create.sh | cqlsh

或者使用发布的 Docker 镜像(确保提供正确的 IP 地址)

docker run \
  -e CQLSH_HOST={server IP address}  \
  jaegertracing/jaeger-cassandra-schema:1.62.0

对于生产部署,将 MODE=prod DATACENTER={datacenter} 参数传递给脚本,其中 {datacenter} 是 Cassandra 配置/网络拓扑中使用的名称。

该脚本还允许覆盖 TTL、keyspace 名称、复制因子等。在没有参数的情况下运行脚本以查看所有识别参数的完整列表。

注意:有关 Cassandra 模式管理的更多详细信息,请参阅 README外部链接

TLS 支持

Jaeger 支持 TLS 客户端到节点连接,只要您正确配置了 Cassandra 集群。在使用例如 cqlsh 验证后,您可以像这样配置收集器和查询

docker run \
  -e CASSANDRA_SERVERS=<...> \
  -e CASSANDRA_TLS=true \
  -e CASSANDRA_TLS_SERVER_NAME="CN-in-certificate" \
  -e CASSANDRA_TLS_KEY=<path to client key file> \
  -e CASSANDRA_TLS_CERT=<path to client cert file> \
  -e CASSANDRA_TLS_CA=<path to your CA cert file> \
  jaegertracing/jaeger-collector:1.62.0

模式工具也支持 TLS。您需要创建一个自定义的 cqlshrc 文件,如下所示

# Creating schema in a cassandra cluster requiring client TLS certificates.
#
# Create a volume for the schema docker container containing four files:
# cqlshrc: this file
# ca-cert: the cert authority for your keys
# client-key: the keyfile for your client
# client-cert: the cert file matching client-key
#
# if there is any sort of DNS mismatch and you want to ignore server validation
# issues, then uncomment validate = false below.
#
# When running the container, map this volume to /root/.cassandra and set the
# environment variable CQLSH_SSL=--ssl
[ssl]
certfile = ~/.cassandra/ca-cert
userkey = ~/.cassandra/client-key
usercert = ~/.cassandra/client-cert
# validate = false

兼容的后端

Elasticsearch

  • 自 Jaeger v0.6.0 起支持
  • 支持的 ES 版本:7.x、8.x(自 Jaeger v1.52.0 起)

Elasticsearch 版本会自动从根/ping 端点获取。根据此版本,Jaeger 使用兼容的索引映射和 Elasticsearch REST API。版本可以通过 --es.version= 标志明确提供。

Elasticsearch 不需要初始化,除了 安装和运行 Elasticsearchexternal link 。运行后,将正确的配置值传递给 **jaeger-collector** 和 **jaeger-query**。

配置

最小
docker run \
  -e SPAN_STORAGE_TYPE=elasticsearch \
  -e ES_SERVER_URLS=<...> \
  jaegertracing/jaeger-collector:1.62.0
所有选项

要查看配置选项的完整列表,您可以运行以下命令

docker run \
  -e SPAN_STORAGE_TYPE=elasticsearch \
  jaegertracing/jaeger-collector:1.62.0 \
  --help

Elasticsearch 索引的分片和副本

分片和副本是一些需要特别注意的配置值,因为它们是在索引创建时决定的。 这篇文章external link 详细介绍了如何选择分片数量以进行优化。

Elasticsearch 索引滚动

Elasticsearch 索引滚动external link 是一种索引管理策略,可以优化分配给索引的资源使用情况。例如,不包含任何数据的索引仍然分配分片,反之,单个索引可能包含比其他索引更多的数据。默认情况下,Jaeger 将数据存储在每日索引中,这可能无法最佳地利用资源。可以通过 --es.use-aliases=true 启用滚动功能。

滚动允许您根据以下一个或多个条件配置何时滚动到新索引

滚动索引管理策略比使用默认的每日索引更复杂,它需要一个初始化作业来准备存储,以及两个 cron 作业来管理索引。

要了解有关 Jaeger 中滚动索引管理的更多信息,请参阅此 文章external link

有关自动滚动,请参阅 Elasticsearch ILM 支持

初始化

以下命令通过创建索引别名、索引和索引模板来准备 Elasticsearch 用于滚动部署

docker run -it --rm --net=host jaegertracing/jaeger-es-rollover:latest init https://127.0.0.1:9200 # <1>

如果需要初始化归档存储,请添加 -e ARCHIVE=true

初始化后,Jaeger 可以使用 --es.use-aliases=true 部署。

滚动到新索引

下一步是定期执行滚动 API,该 API 根据提供的条件将写入别名滚动到新索引。该命令还将新索引添加到读取别名,以便新数据可用于搜索。

docker run -it --rm --net=host -e CONDITIONS='{"max_age": "2d"}' jaegertracing/jaeger-es-rollover:latest rollover  https://127.0.0.1:9200 # <1>

<1> 如果当前写入索引的年龄超过 2 天,该命令将别名滚动到新索引。有关更多条件,请参阅 Elasticsearch 文档external link

下一步是将旧索引从读取别名中删除。这意味着旧数据将无法用于搜索。这模拟了在默认的每日索引部署中使用的 --es.max-span-age 标志的行为。此步骤是可选的,旧索引可以简单地由下一步骤中的索引清理器删除。

docker run -it --rm --net=host -e UNIT=days -e UNIT_COUNT=7 jaegertracing/jaeger-es-rollover:latest lookback  https://127.0.0.1:9200 # <1>

<1> 从读取别名中删除超过 7 天的索引。

删除旧数据

历史数据可以使用 jaeger-es-index-cleaner 删除,它也用于每日索引。

docker run -it --rm --net=host -e ROLLOVER=true jaegertracing/jaeger-es-index-cleaner:latest 14 https://127.0.0.1:9200 # <1>

<1> 删除超过 14 天的索引。

Elasticsearch ILM 支持

Elasticsearch ILMexternal link 根据性能、弹性和保留要求自动管理索引。

例如

  • 根据大小(字节或文档数)或年龄滚动到新索引,并存档以前的索引
  • 删除陈旧的索引以执行数据保留标准
启用 ILM 支持
  • 在 Elasticsearch 中创建一个名为 jaeger-ilm-policy 的 ILM 策略。

    例如,以下策略将在“活动”索引超过 1m 时将其滚动,并删除超过 2m 的索引。

    curl -X PUT https://127.0.0.1:9200/_ilm/policy/jaeger-ilm-policy \
    -H 'Content-Type: application/json; charset=utf-8' \
    --data-binary @- << EOF
    {
      "policy": {
        "phases": {
          "hot": {
            "min_age": "0ms",
            "actions": {
              "rollover": {
                "max_age": "1m"
              },
              "set_priority": {
                "priority": 100
              }
            }
          },
          "delete": {
            "min_age": "2m",
            "actions": {
              "delete": {}
            }
          }
        }
      }
    }
    EOF
    
  • 使用 ES_USE_ILM=true 运行 Elasticsearch 初始化程序

    docker run -it --rm --net=host -e ES_USE_ILM=true jaegertracing/jaeger-es-rollover:latest init https://127.0.0.1:9200 # <1>
    

    <1> 如果需要初始化归档存储,请添加 -e ARCHIVE=true

    使用 ILM 支持进行初始化时,请确保事先在 Elasticsearch 中创建了一个名为 jaeger-ilm-policy 的 ILM 策略(参见上一步),否则将显示以下错误消息

    “Elasticsearch 中不存在 ILM 策略 jaeger-ilm-policy。请创建它并重新运行 init”

    初始化后,使用 --es.use-ilm=true--es.use-aliases=true 部署 Jaeger。

升级 Elasticsearch 版本

Elasticsearch 定义了线协议和索引兼容性版本。索引兼容性定义了节点可以从中读取数据的最低版本。例如 Elasticsearch 8 可以读取由 Elasticsearch 7 创建的索引,但它无法读取由 Elasticsearch 6 创建的索引,即使它们使用相同的索引映射。因此,从 Elasticsearch 7 升级到 8 不需要任何数据迁移。但是,从 Elasticsearch 6 升级到 8 必须通过 Elasticsearch 7 完成,并等待由 ES 6.x 创建的索引被删除或显式重新索引。

请参阅 Elasticsearch 文档external link 以了解线协议和索引兼容性版本。通常,这些信息可以从 root/ping REST 端点获取。

重新索引

在从 Elasticsearch 6 升级到 8(通过 Elasticsearch 7)时,可以使用手动重新索引,而不必等待由 Elasticsearch 6 创建的索引被删除。

  1. 将所有跨度索引重新索引到以 -1 为后缀的新索引

    curl -ivX POST -H "Content-Type: application/json" https://127.0.0.1:9200/_reindex -d @reindex.json
    {
      "source": {
        "index": "jaeger-span-*"
      },
      "dest": {
        "index": "jaeger-span"
      },
      "script": {
        "lang": "painless",
        "source": "ctx._index = 'jaeger-span-' + (ctx._index.substring('jaeger-span-'.length(), ctx._index.length())) + '-1'"
      }
    }
    
  2. 删除具有旧映射的索引

    curl -ivX DELETE -H "Content-Type: application/json" https://127.0.0.1:9200/jaeger-span-\*,-\*-1
    
  3. 创建没有 -1 后缀的索引

    curl -ivX POST -H "Content-Type: application/json" https://127.0.0.1:9200/_reindex -d @reindex.json
    {
      "source": {
        "index": "jaeger-span-*"
      },
      "dest": {
        "index": "jaeger-span"
      },
      "script": {
        "lang": "painless",
        "source": "ctx._index = 'jaeger-span-' + (ctx._index.substring('jaeger-span-'.length(), ctx._index.length() - 2))"
      }
    }
    
  4. 删除带后缀的索引

    curl -ivX DELETE -H "Content-Type: application/json" https://127.0.0.1:9200/jaeger-span-\*-1
    

对其他 Jaeger 索引类似地运行命令。

可能存在更有效的迁移过程。请与社区分享任何发现。

Kafka

  • 从 Jaeger 1.6.0 开始支持
  • 支持的 Kafka 版本:0.9+

Kafka 可用作收集器和实际存储之间的中间缓冲区。**jaeger-collector** 配置为 SPAN_STORAGE_TYPE=kafka,使其将所有接收到的跨度写入 Kafka 主题。 **jaeger-ingester** 用于从 Kafka 读取跨度并将其存储在另一个存储后端(Elasticsearch 或 Cassandra)中。

写入 Kafka 对构建后期处理数据管道特别有用。

配置

最小
docker run \
  -e SPAN_STORAGE_TYPE=kafka \
  -e KAFKA_PRODUCER_BROKERS=<...> \
  -e KAFKA_TOPIC=<...> \
  jaegertracing/jaeger-collector:1.62.0
所有选项

要查看配置选项的完整列表,您可以运行以下命令

docker run \
  -e SPAN_STORAGE_TYPE=kafka \
  jaegertracing/jaeger-collector:1.62.0 \
  --help

主题 & 分区

除非您的 Kafka 集群配置为自动创建主题,否则您需要提前创建它。您可以参考 Kafka 快速入门文档外部链接 了解如何操作。

您可以在 官方文档外部链接 中找到有关主题和分区的更多一般信息。 这篇文章外部链接 提供了有关如何选择分区数量的更多详细信息。

远程存储

Jaeger 支持基于 gRPC 的 远程存储 API外部链接,它允许使用自定义存储后端扩展 Jaeger 生态系统,这些后端不受项目直接支持。这些存储后端可以部署为远程 gRPC 服务器(从 Jaeger v1.30 开始)。从 v1.58 开始将不再支持作为 sidecar 插件的旧部署模式。

要使用远程存储作为 Jaeger 存储后端,请使用 grpc 作为存储类型并指定远程 gRPC 服务器地址。有关更多信息,请参考 jaeger/plugin/storage/grpc外部链接

示例

docker run \
  -e SPAN_STORAGE_TYPE=grpc \
  -e GRPC_STORAGE_SERVER=<...> \
  jaegertracing/all-in-one:1.62.0

已知的远程存储后端

指标存储后端

Jaeger 查询能够从存储后端查询聚合的 R.E.D 指标,并在 监视器选项卡 上可视化它们。需要注意的是,配置的指标存储类型仅用于读取,因此仅适用于 Jaeger 查询组件(以及包含 Jaeger 查询的 All In One)。

存储类型可以通过 METRICS_STORAGE_TYPE 环境变量传递。有效值为:prometheus

Prometheus

Jaeger 查询支持任何与 PromQL 兼容的后端。Julius Volz 在 https://promlabs.com/blog/2020/11/26/an-update-on-promql-compatibility-across-vendors外部链接 中编制了这些后端的列表。

配置

最小
docker run \
  -e METRICS_STORAGE_TYPE=prometheus \
  jaegertracing/jaeger-query:1.62.0
所有选项

要查看配置选项的完整列表,您可以运行以下命令

docker run \
  -e METRICS_STORAGE_TYPE=prometheus \
  jaegertracing/jaeger-query:1.62.0 \
  --help

TLS 支持

Jaeger 支持 TLS 客户端到 Prometheus 服务器的连接,只要您已 正确配置了 Prometheus 服务器外部链接。您可以像这样配置 jaeger-query

docker run \
  -e METRICS_STORAGE_TYPE=prometheus \
  -e PROMETHEUS_SERVER_URL=<...> \
  -e PROMETHEUS_TLS_ENABLED=true \
  -e PROMETHEUS_TLS_CA=<path to your CA cert file> \
  jaegertracing/jaeger-query:1.62.0

服务依赖的聚合作业

生产部署需要一个外部进程来聚合数据并创建服务之间的依赖关系链接。项目 spark-dependencies外部链接 是一个 Spark 作业,它推导出依赖关系链接并将它们直接写入存储。