Jaeger 分布式追踪 5 分钟完整指南:从接入 Trace 到 RED 性能指标一站跑通
【免费下载链接】jaegerCNCF Jaeger, a Distributed Tracing Platform项目地址: https://gitcode.com/GitHub_Trending/ja/jaeger
Jaeger 是 CNCF 毕业级的分布式追踪平台,负责接收 OpenTelemetry 上报的链路数据,存入可插拔的存储后端,并提供 UI 完成 trace 搜索、对比与 RED 性能指标查看,帮你快速定位微服务架构里的瓶颈与错误来源。
一次慢请求的排查困境
想象一个订单接口平均耗时 800ms,但你只有四个服务的日志文件。你拿着 request ID 在日志里逐条翻,发现 frontend 等 driver 花了 600ms,可 driver 的日志又指向 customer 服务——翻到第三跳,时间线已经对不上了。你缺的不是日志,而是一张把每个请求在各服务间的耗时、错误状态完整串起来的链路图。这正是 Jaeger 解决的问题:每个请求生成唯一 Trace ID,所有服务的 span 按时间轴拼回,慢在哪一跳、哪一跳报了错,一眼可见。
架构思路:把 trace 生命周期拆成四层可独立配置的单元
Jaeger v2 不再从零造轮子,而是复用 OpenTelemetry Collector 的组件体系,把一条 trace 的生命周期拆成四段:接收(receiver)、处理(processor)、导出(exporter)、查询(query service + UI)。每段都是独立单元,通过一个 YAML 文件声明式组装——你可以只换掉存储导出器而不动接收端,也可以只加一个采样 processor 而不改后端。仓库里 cmd/jaeger/config.yaml 就是一个完整的最小配置样本。
核心能力拆解
三种上报协议共用一条流水线
OTLP、Jaeger 原生协议、Zipkin 三类 receiver 可同时在一条 traces 流水线中声明,旧系统用 Zipkin 上报、新系统用 OTel SDK 上报可以并存,接入方不需要统一改造。
六种存储后端按场景切换
内存(开发调试)、Badger(单机轻量)、Elasticsearch、OpenSearch、Cassandra、ClickHouse(大规模生产)。后端能力会启动时自动通告给 UI,不支持的功能直接隐藏。各后端的参考配置就在 cmd/jaeger/ 目录下,如config-cassandra.yaml、config-clickhouse.yaml。
从 span 数据直接算出 RED 性能指标
SPM(Service Performance Monitoring)功能把 span 数据聚合成请求量、错误率、延迟三类 RED 指标,在 UI 的 Monitor 标签页以图表呈现,也提供 HTTP API 供外部系统调用。它还能跳过 Prometheus,直接从 Elasticsearch/OpenSearch 里的 trace 存储查询指标,省掉一套指标存储。详细说明见 docker-compose/monitor/README.md。
自适应采样控制数据成本
生产环境的 span 量可能压垮存储。adaptive_sampling processor 会根据当前流量与采样率动态调整,remote_sampling扩展把策略下发给 SDK,端上就能少采。策略可以是静态 JSON 文件,也可以是自适应计算,见 sampling-strategies.json。
完整实操走查:从零到看到第一条 trace 🔍
以下走查基于仓库自带的 monitor 演示环境,它会拉起 Jaeger、模拟流量、Prometheus 和 Grafana 一整条链路,不需要你准备真实应用。
第一步:拿到仓库
git clone https://gitcode.com/GitHub_Trending/ja/jaeger cd jaeger/docker-compose/monitor第二步:启动完整链路
docker compose up这个 docker-compose.yml 会启动四个容器:Jaeger all-in-one(挂载 config-spm.yaml 作为配置)、MicroSim(持续生成模拟 span)、Prometheus、Grafana。MicroSim 每 500ms 发一条 span 到 OTLP HTTP 端口 4318,稍等一两分钟积累数据即可。
第三步:主动注入一条 trace 并到 UI 查看
docker run --env OTEL_EXPORTER_OTLP_TRACES_ENDPOINT="http://jaeger:4318/v1/traces" \ --network monitor_backend --rm jaegertracing/jaeger-tracegen:latest \ -trace-exporter otlp-http -traces 1tracegen 是仓库内置的链路生成器(cmd/tracegen/)。打开 http://localhost:16686/ ,在 Search 页把 Service 选为tracegen,点击 Find Traces,就能看到带时间轴分布和 span 明细的搜索结果:
第四步:切换 Monitor 标签看 RED 指标
进入 http://localhost:16686/monitor ,选择tracegen服务,页面会展示延迟(含 P95/P90/P50 分位)、错误率、请求速率三张图,以及每个 operation 的 Impact 排序——哪个接口对整体性能影响最大,这里比翻 trace 更快:
想验证数据链路是否真的走通,还可以打开 Grafana(http://localhost:3000 ,已预置 Jaeger mixin 看板)查看 Prometheus 侧的原始指标。
配置与调优建议
| 配置项 | 调整位置 | 为什么 |
|---|---|---|
memory 后端max_traces | 配置文件 storage 段 | 内存后端无淘汰压力时 trace 会无限堆积,开发环境建议限制在 10 万左右 |
initial_sampling_probability | remote_sampling 扩展 | 自适应采样的起点值,流量大时调低可显著减少存储写入,但会损失低频请求细节 |
SPANMETRICS_FLUSH_INTERVAL | 环境变量 | RED 指标的聚合刷新间隔,调小则 Monitor 页更新更及时,调大降低计算开销 |
查询参数lookback/step | UI 或 HTTP API | 时间窗与数据点粒度直接决定后端压力,排查历史问题时别默认开 1 小时窗口 + 1ms 步长 |
社区参与
Jaeger 由 CNCF 托管并采用开放治理,代码、文档、issue 之外的贡献(翻译、测试、反馈)同样受欢迎,参与方式见 README。项目遵循明确的功能弃用缓冲期与存储后端版本支持策略,方便规划升级节奏。
快速上手三步
- 拉取仓库:
git clone https://gitcode.com/GitHub_Trending/ja/jaeger - 进入
docker-compose/monitor目录执行docker compose up - 访问 http://localhost:16686/ ,等 MicroSim 积累数据后查看 Search 与 Monitor 页
只想要最小验证环境时,一条docker run --rm -p 16686:16686 -p 4317:4317 -p 4318:4318 jaegertracing/jaeger:latest即可启动含内存存储的 all-in-one,详见 README Quick Start 与 examples/hotrod/ 示例应用。
现在打开终端,把上面四条命令跑一遍——几分钟后你就能在自己的 Jaeger UI 里看到第一条完整 trace。
核心关键词:分布式追踪、Jaeger、链路搜索
长尾关键词:Jaeger Docker 部署、OpenTelemetry trace 接入、RED 性能监控指标、分布式追踪存储后端选型、自适应采样配置
【免费下载链接】jaegerCNCF Jaeger, a Distributed Tracing Platform项目地址: https://gitcode.com/GitHub_Trending/ja/jaeger
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考