本文我将带大家基于 Jaeger 构建全链路追踪系统,也包括一些我在这个过程中遇到的一些问题总结,希望能够对大家有所帮助。
Stargazers over time
分布式全链路跟踪系统是什么?
分布式链路跟踪的核心基本都是 Google Dapper 论文所述,使用全局 TraceID 表示一条调用链,连接各个服务调用(用 SPAN 表示),通过分析 SPAN 之间的父子关系形成跟踪树。 另外通过中间件的埋点和业务自定义的 Annotation ,记录日志并采用收集器进行离线和在线分析,从而实现调用链跟踪、优化决策等信息。
Dapper 是什么?
Dapper 是 Google 发表的分布式链路跟踪的论文。
Jaeger 是什么?
Jaeger 是 Uber 基于 Google Dapper 开发的分布式链路跟踪系统的实现。
其他
- Ziplin
实战演示
- 本地运行 Docker
jaegertracing/all-in-one:latest
,打开http://localhost:16686
如果能够看到 Jaeger UI 即表示运行成功了; git clone https://github.com/yangwenmai/jaeger-opentracing-examples.git
;GOOS=linux GOARCH=amd64 go build .
将生成jaeger-opentracing-examples
的二进制可执行文件;docker build -t jaeger-opentracing-examples:dev .
制作一个本地 jaeger-opentracing-examples 的 Docker 镜像;docker run -it --name=jaeger-opentracing-examples -p 0.0.0.0:8080:8080 jaeger-opentracing-examples:dev
- 本地访问
http://localhost:8080
,然后打开http://localhost:16686
Search 即可查看到你注册的全链路跟踪请求了。
坑/问题
- Docker 运行要特别注意网络互通,默认 Docker 网络的 IP 是
172.17.0.x
。 - 实际运行中可能存在一定时间的延时,所以你访问请求之后需要等一会儿才可以在 Jaeger UI 上查看到请求。
- 注意上报服务器地址是
Reporter中的LocalAgentHostPort
; - 注意本文是使用 dep 包管理工具,特别要注意 vendor 中的
github.com/apache/thrift/
版本,如果你使用github.com/apache/thrift
master 分支,那么你将编译不通过;
欲知更多,请前往 jaeger-opentracing-examples
参考资料
- http://ginobefunny.com/post/learning_distributed_systems_tracing/
- https://bigbully.github.io/Dapper-translation/
- https://tech.meituan.com/mt-mtrace.html
- https://github.com/jaegertracing/jaeger
- https://github.com/alextanhongpin/go-jaeger-trace
- http://github.com/jukylin/trace_example
- http://github.com/jukylin/blog/blob/master/Uber分布式追踪系统Jaeger使用介绍和案例【PHP%20%20%20Hprose%20%20%20Go】.md
- http://www.infoq.com/cn/articles/evolving-distributed-tracing-at-uber-engineering
茶歇驿站
一个可以让你停下来看一看,在茶歇之余给你帮助的小站,这里的内容主要是后端技术,个人管理,团队管理,以及其他个人杂想。