Jaeger分布式链路追踪实操:Win/Mac双平台调用耗时分析
想在 Windows 或 macOS 环境下快速部署一套完整的 Jaeger 链路追踪系统,并完成一次真实请求的端到端耗时分析?无需手动编译源码、配置依赖库或调试冗长的配置文件——直接通过容器启动,几步操作即可实现。
启动 Jaeger 后端服务(All-in-One)
单条命令即可拉起 Jaeger 全栈环境。官方提供的 all-in-one 镜像自动启动收集器、查询服务与 Web UI,所有组件共享内存存储,无需额外配置数据库。
打开终端(Windows 可使用 PowerShell 或 WSL2,macOS 直接使用 Terminal),执行:
docker run -d --name jaeger --rm -p 6831:6831/udp -p 16686:16686 jaegertracing/all-in-one:latest
注意不要添加 bash 后缀,否则容器启动后立即退出。该镜像默认以守护进程模式运行,配合 --rm 参数,容器停止时自动清理残留。
等待约 3 秒,在浏览器访问 localhost:16686,若能看到 Jaeger UI 登录页(Service 下拉框为空),即表示后端已就绪。
启动 HotROD 演示应用(生成真实调用链)
HotROD 是 Jaeger 官方提供的端到端演示系统,内部集成 frontend、customer、route、driver 四个微服务。它会自动发起跨服务的 HTTP/RPC 调用并上报 Span,天然对接 Jaeger Agent 的 UDP 接收端口,适合快速验证链路追踪效果。
执行以下命令启动 HotROD:
方法一(推荐,自动网络连接):
docker run --rm -it --network="host" -p 8080-8083:8080-8083 jaegertracing/example-hotrod:1.6 all --jaeger-agent.host-port=127.0.0.1:6831
方法二(适用于 Docker Desktop for Mac/Windows,需显式链接):
首先确认 Jaeger 容器名称为 jaeger(之前使用了 --name jaeger),再运行:
docker run --rm -it --link jaeger:jaeger -p 8080-8083:8080-8083 jaegertracing/example-hotrod:1.6 all --jaeger-agent.host-port=jaeger:6831
若出现 connection refused 错误,说明 HotROD 无法连接到 Jaeger Agent——请检查是否遗漏 --link 或 --network="host",同时使用 docker ps 确认 Jaeger 容器仍在运行中。
触发请求并定位高耗时 Span
第一步:在浏览器打开 localhost:8080,随机点击一个司机头像(例如 “Trom Chocolatier”),触发一次完整的调用链。
第二步:切换至 Jaeger UI(localhost:16686),在 Service 下拉框中选择 frontend → 点击 Find Traces。
第三步:在结果列表中选中最新的一条 trace(通常耗时最长的排在最上方),点击进入 Trace Detail View。
第四步:观察右侧火焰图。垂直方向展示调用层级,水平方向展示耗时分布。重点关注颜色最深、条形最长的 Span——例如 mysql SELECT 耗时 304ms,或 redis:GetDriver 多次累计超过 100ms。
第五步:点击该 Span,右侧面板展开详细内容。查看 Tags 中的 http.status_code、db.statement 或 redis.command,确认是否为慢 SQL 或高频 Redis 命令。
对比分析两个请求的 Span Exclusive Time
Exclusive Time(独占耗时)的计算方式为:Span 总耗时 − 所有子 Span 耗时之和。该指标反映服务自身的计算时间或资源阻塞情况,而非网络延迟或下游调用消耗。
① 在 Trace Detail View 中,定位第一个 frontend Span(顶部蓝色条),记录其 Duration 与 Exclusive Time 数值。
② 点击页面右上角的 Refresh,触发一次新请求,等待数秒后返回同一 trace 列表,点击新 trace 中同名的 frontend Span。
③ 对比两次 Exclusive Time:若第二次数值明显升高(例如从 12ms 上升至 89ms),说明 frontend 本地处理逻辑存在瓶颈,与下游服务无关。
④ 接下来可直接下钻该 Span 的 Logs 标签页,检查是否存在 WARN 或 ERROR 日志行——Jaeger 会自动关联 OpenTelemetry Collector 注入的日志字段,无需再切换到其他日志平台查询。
