用户说接口慢。你看网关日志:耗时 800 毫秒。但网关后面还有五个服务——到底慢在哪个?各服务的日志各写各的,根本拼不起来。

Jaeger 是分布式链路追踪系统(CNCF 毕业项目),做的事就是把一次请求在多个服务之间的完整路径串起来。

Jaeger:把跨服务的请求路径串起来

从单体拆成微服务之后

  • 一次请求横跨好几个服务,日志分散在不同机器
  • 每个服务都觉得自己不慢,可加起来就是很慢
  • 出问题只能靠逐个服务猜,排查全凭经验
  • 服务之间的依赖关系,没人能说清楚全貌

Jaeger 怎么用

Jaeger 怎么用

追踪一次请求的完整路径。 每个请求生成一条 trace,下面按 span 逐段记录每个服务、每次调用的耗时与状态。

看清瓶颈在哪一段。 时间线/火焰图展示各 span 耗时,哪个环节拖慢了整体一目了然。

依赖关系可视化。 从调用数据自动生成服务依赖拓扑,不用再靠文档维护。

标准协议接入。 基于 OpenTelemetry,用 OTLP 上报(gRPC 4317 / HTTP 4318),不绑定特定语言的 SDK。

部署简单。 all-in-one 镜像一条 docker run 就能跑起来,包含 UI、收集器、查询服务和内存存储。

和日志、指标的差别

三类可观测数据的差别

链路追踪 日志 指标
回答的问题 这个请求慢在哪 发生了什么 整体有多少 / 多快
跨服务串联 有(trace 贯穿) 需自行关联 无
单请求细节 完整 依赖打点 只有聚合值

"日志告诉你每个服务自己做了什么,追踪告诉你它们是怎么一起把请求做完的。"

需要注意

要埋点才有数据。 服务需要接入 OpenTelemetry SDK 并把上下文传递下去;链路中间断了,跨服务就串不起来。

采样策略要提前设计。 高流量下全量采集的开销和存储都不小,通常按比例采样或采用尾部采样。

生产环境别用默认内存存储。 那是给快速体验用的,正式部署要换 Cassandra、Elasticsearch 等后端;另外 Jaeger v2 已发布,部署前留意版本差异与迁移说明。

对"接口慢但不知道慢在哪"这类问题,链路追踪几乎是唯一能直接给出答案的手段。

项目地址: https://github.com/jaegertracing/jaeger