分布式跟踪系统 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 类似编程中对接口的实现。