主流追踪系统对比:Jaeger、Zipkin、SkyWalking、Datadog

说句实话,选追踪系统这事,坑真的不少。我自己前前后后用过三四套方案,踩过存储爆掉的坑,也遇到过采样率设错导致关键调用链丢失的尴尬。你想想看,分布式链路追踪解决的是“查问题慢”的问题,但如果工具本身选错了,反而会引入一堆新麻烦。

系统选型没有银弹。我习惯从四个维度去评估:部署成本、数据量级、查询灵活性、生态兼容性。下面我把市面上最主流的四个方案拆开来讲,把各自的优点和痛点都说清楚。

链路追踪系统选型知识结构 链路追踪选型 Zipkin Jaeger SkyWalking Datadog ✓ 轻量,部署快 ✗ 存储局限(ES/MySQL) ✗ 无告警能力 ✓ 云原生 / OpenTelemetry ✓ 多存储后端 ✗ UI 功能偏弱 ✓ 无侵入探针 ✓ APM 功能完整 ✗ 学习和运维曲线高 ✓ 分钟级接入 ✓ 全栈可观测性 ✗ 按数据量计费,贵 选型建议 小团队/概念验证 → Zipkin | 云原生/Kubernetes → Jaeger APM一体化运维 → SkyWalking | 预算充足/全栈监控 → Datadog 技术栈维度 部署成本 · 数据规模 · 查询灵活性 · 生态/集成能力

Zipkin——轻量级的老牌选手

Zipkin 是 Twitter 开源的项目,讲道理,它在 2015 年前后几乎是链路追踪的代名词。我刚开始接触分布式追踪时,第一套实践方案就是 Zipkin + Brave。

优点:

  • 部署极其简单。 单节点几分钟就能跑起来,适合做概念验证。我曾经在一台 2C4G 的机器上同时跑了 Collector、Query 和 UI,扛住了日均 200 万 span 的压测。
  • 客户端库覆盖广。 官方支持 Java、Go、Python、Ruby 等,社区还有 C#、PHP 的实现。你如果项目语言杂,Zipkin 的适配成本很低。
  • 体系成熟,文档齐全。 遇到问题搜 stackoverflow 基本都有答案。

缺点:

  • 存储选择性有限。 原生支持 Elasticsearch、Cassandra、MySQL。但你想想看,MySQL 存调用链简直是在开历史倒车,ES 和 Cassandra 才是正解。可一旦数据量到了 TB 级,ES 的写性能就成了瓶颈。
  • 缺乏采样策略灵活性。 我记得有次排查一个问题,因为默认采样率设得太低(0.01%),导致关键慢调用根本没落库,查了个寂寞。
  • 没有告警和聚合分析。 它就是个单纯的数据展示工具,你想做基于调用链的失败率告警?抱歉,得自己对接 Prometheus。
适用场景: 小团队起步、研发环境调试、不想引入太重运维负担的团队。如果日调用链数据量在 1TB 以下,Zipkin 完全够用,性价比很高。

Jaeger——云原生的宠儿

Jaeger 是 Uber 捐给 CNCF 的项目,一路走到了毕业状态。我目前的主力追踪系统就是它。为什么?因为它跟 Kubernetes 生态融合得特别好。

优点:

  • 原生 OpenTelemetry。 Jaeger 是早期支持 OpenTracing 的标杆,现在全面拥抱 OpenTelemetry。我建议你用 Jaeger 就直接走 OTLP gRPC 上报,性能比 HTTP-JSON 高出一大截。
  • 多存储后端。 支持 Elasticsearch、Cassandra、Badger、Kafka。Badger 嵌入式的方案很有意思,做单机验证不用搭 ES。我自己在本地开发环境就用 Badger,省心。
  • 采样策略灵活。 支持基于 head 的固定采样、概率采样、速率采样,还能通过配置中心动态调整。我曾经在线上把某个核心接口的采样率临时从 0.01% 提到 10%,一分钟后就找出了内存泄漏的根因。
  • Spark 集成做依赖分析。 可以画出服务依赖图,调用关系一目了然。

缺点:

  • UI 功能偏弱。 说实话,Jaeger 的查询页面用起来不太顺手,筛选条件少,没法做深度的聚合统计。对比一下 SkyWalking 的拓扑图,差距蛮大的。
  • 资源占用中等偏上。 Agent 侧还好,但 Collector 和 Query 组件如果没配置好,内存很容易飙升。我踩过 collector 不限制内存,直接 OOM 的坑。
  • Elasticsearch 版本适配问题。 Jaeger 对 ES 版本很敏感,升级 ES 时经常要同步升级 Jaeger,否则数据索引会异常。
踩坑提醒: 如果你用 Jaeger 的 gRPC 上报,记得关注客户端的重试和超时设置。曾经某次 Collector 节点滚动重启,所有 Agent 同时重连,大量重复 span 写入 ES,直接把集群写挂了。建议加一层 Kafka 做缓冲。

SkyWalking——天生的APM选手

SkyWalking 是中国开源界的代表作品,吴晟团队的贡献很大。它的定位不是纯粹的追踪,而是 APM(应用性能管理)。说白了,它把链路追踪、指标监控、告警统统打包了。

优点:

  • 无侵入探针。 基于 Java Agent 或 .NET Core 的诊断 API,一行代码都不用改就能接入。对于遗留系统或停止维护的服务,这简直是救命稻草。我迁移过一个跑了 6 年的老项目,用 SkyWalking 的 agent 挂上,十分钟就看到调用链了。
  • 完整的 APM 能力。 包含服务拓扑、JVM 监控、数据库调用分析、端点慢查询等。一个界面解决所有问题,不用切到 Prometheus 再查一遍。
  • 多语言支持。 Java、.NET、Go、Node.js、PHP 等都有 agent。Go 版的 agent 采用 eBPF 方式集成,性能损耗很低。
  • 告警引擎内置。 支持基于规则(如错误率 > 10% 持续 3 分钟)的告警,对接钉钉、邮件、Webhook 很方便。

缺点:

  • 学习和运维复杂度高。 组件太多了:OAP Server、UI、Storage、Agent、Receiver。我第一次搭建时花了一整天才跑通全链路。小型团队慎入。
  • 定制化难度大。 底层协议是自家的,如果想扩展自定义埋点或接入非官方语言,需要自己写 receiver 和 parser,工作量不小。
  • 生态偏向 Java。 虽然支持多语言,但 Java Agent 体验最好,其他语言的 Agent 功能相对简化。比如 Node.js 的 Agent 对异步调用链支持就不太完美。

Datadog——SaaS集成王者

Datadog 是商业产品里做得最好的。如果你预算充足,又不想自建维护,直接上 Datadog 真的省心。我见过不少中大型企业,买 Datadog 的 APM 加日志管理套餐,业务方反馈非常好。

优点:

  • 分钟级接入。 安装一个 Agent,配置好 ,链路数据就自动上报了。不需要操心 Collector、Storage、UI 的任何运维问题。
  • 全栈可观测性。 追踪、日志、指标、基础设施监控、网络、安全检测,全在一个平台联动。我遇到过最爽的场景:查 CPU 飙升,点开容器指标,关联到慢 span 日志,再跳到异常堆栈,全程不离开 Datadog。
  • 强大的可视化。 火焰图、服务图谱、依赖分析、动态标签聚合,查询语言灵活。尤其是它的 Trace-Search,支持用标签和布尔逻辑组合过滤,很强大。
  • 自动化关联。 Datadog 可以自动把 APM 和 Infrastructure 关联起来,比如某个 Pod 内存被打满,自动关联那段时间的调用链。

缺点:

  • 成本高。 按 span 条数 + Host 数 + 日志流量三重计费。我见过一个月花 10 万美元的案例。小公司慎入,不然月底看到账单会心梗的。
  • 数据主权和安全问题。 所有数据都要传到 Datadog 的 AWS 云上。如果公司有数据合规要求(比如金融、政务),这条路基本走不通。
  • Agent 资源占用。 Datadog Agent 功能太全了,走全量采集时 CPU 占用率可能到 5%~8%。我优化过一轮,把不需要的集成模块删掉,降到 2% 左右。

选型建议总结

说回选型,我觉得没有标准答案,但可以给出几条我自己的判断原则,你结合实际看看:

选型维度 Zipkin Jaeger SkyWalking Datadog
部署成本 低,单机可跑 中,需 Collector 和 ES 高,组件多 无需部署,SaaS
数据规模支持 中等(TB 级) 良好(多存储扩展) 良好(支持 ES / TiDB) 不限(按量付费)
查询灵活性 一般 良好 优秀 优秀
APM 能力 基本没有 弱(依赖外部系统) 强,内置告警 强,全栈可观测
运维工作量 低 中 高 极低
成本 0(开源) 0(开源) 0(开源) 高(按量计费)
推荐团队 初创/小团队 云原生/k8s 团队 Java 为主 / APM 一体化 预算充足 / 不想自建
我的一点建议: 如果团队刚起步,日 span 量少于 500 万,Zipkin + ES 是最快的起点。如果已经在用 Kubernetes,直接上 Jaeger + OpenTelemetry,未来拓展性更强。如果需要 APM 一体化和告警闭环,SkyWalking 是首选。预算上不封顶、不想碰运维,直接签 Datadog 的合同,省下来的研发时间远比工具费贵。

总结一下,没有完美的工具,只有合适的场景。你想想看,做链路追踪的最终目的是快速定位故障,而不是折腾工具本身。所以我的原则是:选能让你安心写业务代码而不焦虑运维的那套方案。