分布式跟踪系统 Jaeger 的学习笔记。
Jaeger 官方文档,本人在写文章是,官方文档是 1.14
Jaeger 简介
Jaeger 是 Uber 公司开源的一个用于监视和诊断基于微服务的分布式系统。
主要包含以下功能:
Distributed context propagation
分布式上下文传播Distributed transaction monitoring
分布式事务监控Root cause analysis
根本原因分析Service dependency analysis
服务依赖关系分析Performance / latency optimization
性能/延迟优化(应该是分析出哪些需要优化)

图示中,ABCDE 表示五个服务。
用户发起一次请求 RequestX 到 A,
由于 A 该请求依赖服务 B 与 C,
因此 A 分别发送 RPC 请求到 B 和 C,
B 处理完请求后会直接返回到 A,
但是服务 C 还依赖服务 D 和 E,
因此还要发起两个 RPC 请求分别到 D 和 E,D 和 E 处理完毕后回到 C,C 才继续回复到 A,
最终 A 会回复用户 ReplyX。
上面的流程跨若干个服务调用,因此我们需要一个工具来跟踪整个调用过程。
看谁依赖了谁,如果某个服务被依赖过多,考虑是否需要增加负载均衡…
看每个服务响应时间的长短,找出需要优化的点…
Jaeger 就是这样的一种工具。
快速开始
1 | docker run -d --name jaeger \ |
当 docker 启动容器后,在浏览器输入 http://localhost:16686 即可访问 Jaeger 的 UI
OpenTracing
OpenTracing 是一套标准,它通过提供平台无关、厂商无关的API,使得开发人员能够方便的添加(或更换)追踪系统的实现(我们在测试使用中是基本上通过两行代码的更改就可以在 Zipkin 和 Jaeger 之间切换)。
OpenTracing 提供了用于运营支撑系统的和针对特定平台的辅助程序库。程序库的具体信息请参考详细的规范。
OpenTracing 已进入 CNCF(云原生计算基金会,著名的Kubernetes、gRPC和Prometheus等均孵化于此),正在为全球的分布式追踪,提供统一的概念和数据标准。
用一个类比来介绍 OpenTracing,OpenTracing 类似编程中的接口(interface),而 Jaeger 类似编程中对接口的实现。