原文: Uber 分布式追踪系统 Jaeger 使用介绍和案例【PHP Hprose Go】
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tcUAYQFH-1670571853655)(https://hjs-1251193177.cos.ap-shanghai.myqcloud.com/ops/ops-jaeger-ui-1.png)]
随着公司的发展, 业务不断的增加, 模块的不断拆分, 系统间业务调用就变得越复杂, 对定位线上故障带来很大困难。整个调用链不透明, 犹如系统被蒙上一块黑纱, 当线上遇到故障时, 整个技术部就陷入痛苦的漩涡。这时候分布式追踪系统应运而生, 如揭开了黑纱, 让阳光照进黑暗。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rlceXnvO-1670571853655)(https://hjs-1251193177.cos.ap-shanghai.myqcloud.com/ops/ops-jaeger-ui-2.png)]
opentracing 是一套分布式追踪协议, 与平台, 语言无关, 统一接口, 方便开发接入不同的分布式追踪系统。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y9mGhdRE-1670571853656)(https://hjs-1251193177.cos.ap-shanghai.myqcloud.com/ops/ops-jaeger-ui-3.png)]
一个完整的 opentracing 调用链包含 Trace + span + 无限极分类
Jaeger 是 Uber 开发的一套分布式追踪系统, 已在 Uber 大规模使用。并在 2017-9-13 加入 CNCF 开源组织。使用 Jaeger 可以非常直观的展示整个分布式系统的调用链, 由此可以很好发现和解决问题:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uB18vsyN-1670571853656)(https://hjs-1251193177.cos.ap-shanghai.myqcloud.com/ops/ops-jaeger-ui-4.png)]
接口 | Thrift/byte | json/byte | 节省 |
---|---|---|---|
接口 1 | 987 | 2396 | 约 1.5 倍 |
接口 2 | 1212 | 2916 | 约 1.4 倍 |
接口 3 | 12830 | 18893 | 约 40% |
接口 4 | 17158 | 22465 | 约 24% |
接口 5 | 11025 | 14282 | 约 23% |
从中可以看出 thrift 相对 json 减少了不少空间。在我们采集公司接口的数据大小都集中在 10~20k, 所以使用 thrift 会更有优势。
Jaeger 官方提供了多种采集策略, 使用者可以按需选择使用
官方提供了 go, java, node, python 客户端, 其他客户端还在开放中, php 客户端 为个人开发【欢迎 start】
all-in-one 是 Uber 官方打包好的镜像, 可以直接部署使用, 但是只能用于测试环境, 不能用于线上, 因为它把数据放入了内存。
docker run -d -e COLLECTOR_ZIPKIN_HTTP_PORT=9411 -p5775:5775/udp -p6831:6831/udp -p6832:6832/udp \
-p5778:5778 -p16686:16686 -p14268:14268 -p9411:9411 jaegertracing/all-in-one:latest
通过 http://localhost:16686 可以在浏览器查看 Jaeger 的后台
go get github.com/uber/jaeger
cd $GOPATH/src/github.com/uber/jaeger
make install_examples
cd examples/hotrod
go run ./main.go all
http://localhost:8080 浏览器打开查看
docker run -itd
–name=cassandra -p9042:9042
-v /data/cassandra:/var/lib/cassandra
cassandra
按照官方 脚本 整理了一份建表语句 jaeger_tables, 进入 cassandra, 执行语句即可创建所需的表。
keyspaces: jaeger_v1_dc
docker run -itd --network=bridge
–name=jaeger-query
-p16686:16686
jaegertracing/jaeger-query
/go/bin/query-linux
–span-storage.type=cassandra
–cassandra.keyspace=jaeger_v1_dc
–cassandra.servers={{ cassandra }}:9042
–query.static-files=/go/jaeger-ui/
docker run -itd --network=bridge
–name=jaeger-collector
-p14267:14267
-p14268:14268
-p9411:9411
jaegertracing/jaeger-collector
/go/bin/collector-linux
–span-storage.type=cassandra
–cassandra.keyspace=jaeger_v1_dc
–cassandra.servers={{ cassandra }}:9042
docker run
-itd --network=bridge
–name=jaeger-agent
-p5775:5775/udp
-p6831:6831/udp
-p6832:6832/udp
-p5778:5778/tcp
jaegertracing/jaeger-agent
/go/bin/agent-linux --collector.host-port={{ jaeger-collector }}:14267
go get github.com/astaxie/beego
git clone git@github.com:jukylin/trace_example.git
cd trace_example
bee run trace_example
Run Hprose.php
cd vendor/jukylin/jaeger-php/example
php Hprose.php
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IES8W8fI-1670571853656)(https://hjs-1251193177.cos.ap-shanghai.myqcloud.com/ops/ops-jaeger-ui-5.png)]