原文:Uber分佈式追蹤系統Jaeger使用介紹和案例【PHP Hprose Go】php
隨着公司的發展,業務不斷增長,模塊不斷拆分,系統間業務調用變得越複雜,對定位線上故障帶來很大困難。整個調用鏈不透明,猶如系統被蒙上一塊黑紗,當線上遇到故障時,整個技術部就陷入痛苦的漩渦。這時候分佈式追蹤系統應運而生,如揭開了黑紗,讓陽光照進黑暗。html
opentracing是一套分佈式追蹤協議,與平臺,語言無關,統一接口,方便開發接入不一樣的分佈式追蹤系統。java
一個完整的opentracing調用鏈包含 Trace + span + 無限極分類node
Jaeger是Uber開發的一套分佈式追蹤系統,已在Uber大規模使用。並在2017-9-13 加入CNCF 開源組織。使用Jaeger能夠很是直觀的展現整個分佈式系統的調用鏈,由此能夠很好發現和解決問題:python
接口 | 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會更有優點。mysql
Jaeger 官方提供了多種採集策略,使用者能夠按需選擇使用linux
官方提供了 go,java,node,python客戶端,其餘客戶端還在開放中,php客戶端爲我的開發【歡迎star】git
all-in-one 是Uber官方打包好的鏡像,能夠直接部署使用,可是隻能用於測試環境,不能用於線上,由於它把數據放入了內存。github
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的後臺redis
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
cd vendor/jukylin/jaeger-php/example php Hprose.php