摘要:簡單理解一個完整的調(diào)用鏈包含無限極分類追蹤對象,一個代表了一個服務或者流程在系統(tǒng)中的執(zhí)行過程,如,,等執(zhí)行過程。無限極分類服務與服務之間使用無限極分類的方式,通過頭部或者請求地址傳輸?shù)阶畹蛯樱瑥亩颜麄€調(diào)用鏈串起來。
原文:Uber分布式追蹤系統(tǒng)Jaeger使用介紹和案例【PHP Hprose Go】
前言分布式系統(tǒng)調(diào)用過程 opentracing 協(xié)議? 隨著公司的發(fā)展,業(yè)務不斷增加,模塊不斷拆分,系統(tǒng)間業(yè)務調(diào)用變得越復雜,對定位線上故障帶來很大困難。整個調(diào)用鏈不透明,猶如系統(tǒng)被蒙上一塊黑紗,當線上遇到故障時,整個技術(shù)部就陷入痛苦的漩渦。這時候分布式追蹤系統(tǒng)應運而生,如揭開了黑紗,讓陽光照進黑暗。
簡單理解opentracing?opentracing是一套分布式追蹤協(xié)議,與平臺,語言無關(guān),統(tǒng)一接口,方便開發(fā)接入不同的分布式追蹤系統(tǒng)。
一個完整的opentracing調(diào)用鏈包含 Trace + span + 無限極分類
Trace:追蹤對象,一個Trace代表了一個服務或者流程在系統(tǒng)中的執(zhí)行過程,如:test.com,redis,mysql等執(zhí)行過程。一個Trace由多個span組成
span:記錄Trace在執(zhí)行過程中的信息,如:查詢的sql,請求的HTTP地址,RPC調(diào)用,開始、結(jié)束、間隔時間等。
無限極分類:服務與服務之間使用無限極分類的方式,通過HTTP頭部或者請求地址傳輸?shù)阶畹蛯?,從而把整個調(diào)用鏈串起來。
相關(guān)文檔官方文檔
OpenTracing語義規(guī)范(中文版)
OpenTracing語義慣例
opentracing文檔中文版 ( 翻譯 ) 吳晟
分布式追蹤系統(tǒng)Jaeger作用?Jaeger是Uber開發(fā)的一套分布式追蹤系統(tǒng),已在Uber大規(guī)模使用。并在2017-9-13 加入CNCF 開源組織。使用Jaeger可以非常直觀的展示整個分布式系統(tǒng)的調(diào)用鏈,由此可以很好發(fā)現(xiàn)和解決問題:
分布式環(huán)境下信息傳播
分布式交易監(jiān)控
展示跨進程調(diào)用鏈
性能優(yōu)化
定位問題
特性使用udp傳輸數(shù)據(jù),相對于HTTP,優(yōu)點在于,不用擔心Jaeger服務宕機或者網(wǎng)絡傳輸有問題而影響正常的業(yè)務。缺點就是丟包,影響了整條調(diào)用鏈。
數(shù)據(jù)通過Thrift進行序列化,和json對比
接口 | Thrift/byte | json/byte | 節(jié)省 |
---|---|---|---|
接口1 | 987 | 2396 | 約1.5倍 |
接口2 | 1212 | 2916 | 約1.4倍 |
接口3 | 12830 | 18893 | 約40% |
接口4 | 17158 | 22465 | 約24% |
接口5 | 11025 | 14282 | 約23% |
?從中可以看出thrift相對json減少了不少空間。在我們采集公司接口的數(shù)據(jù)大小都集中在10~20k,所以使用thrift會更有優(yōu)勢。
采集策略
Jaeger 官方提供了多種采集策略,使用者可以按需選擇使用
ConstSampler,全量采集
ProbabilisticSampler ,概率采集,默認萬份之一
RateLimitingSampler ,限速采集,每秒只能采集一定量的數(shù)據(jù)
RemotelyControlledSampler ,一種動態(tài)采集策略,根據(jù)當前系統(tǒng)的訪問量調(diào)節(jié)采集策略
客戶端
Go
Java
node
python
php
部署 快速部署 ------ All in one Docker image官方提供了 go,java,node,python客戶端,其他客戶端還在開放中,php客戶端為個人開發(fā)【歡迎star】
?all-in-one 是Uber官方打包好的鏡像,可以直接部署使用,但是只能用于測試環(huán)境,不能用于線上,因為它把數(shù)據(jù)放入了內(nèi)存。
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
官方提供的使用例子,需要go環(huán)境通過 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
cassandra + docker 部署,單機模式http://localhost:8080 瀏覽器打開查看
進入容器建立表空間docker run -itd
--name=cassandra -p9042:9042
-v /data/cassandra:/var/lib/cassandra
cassandra
運行 jaeger-query按照官方腳本整理了一份建表語句jaeger_tables,進入cassandra,執(zhí)行語句即可創(chuàng)建所需的表。
keyspaces:jaeger_v1_dc
運行 jaeger-collectordocker 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/
運行 jaeger-agentdocker 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
跨語言調(diào)用案例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
php
Hprose
Go【beego】
beegoinstall beego
go get github.com/astaxie/beego
Download trace_example
git clone [email protected]:jukylin/trace_example.git cd trace_example bee run trace_examplePHP
install jaeger-php
Run Hprose.php
cd vendor/jukylin/jaeger-php/example php Hprose.phpTrace Result View PS
優(yōu)步分布式追蹤技術(shù)再度精進
Jaeger還在發(fā)展中,官方也希望得到社區(qū)的支持。
Jaeger和Jaeger-php,在公司測試環(huán)境運行了1個多月,于2017-10-18發(fā)布上線。
選擇好采集策略,日志數(shù)據(jù)會爆炸性增長。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/30681.html
摘要:是推出的一款開源分布式追蹤系統(tǒng),兼容。借助阿里云日志服務的海量數(shù)據(jù)處理能力,讓您享受在分布式追蹤領(lǐng)域給您帶來便捷的同時無需過多關(guān)注后端存儲系統(tǒng)的問題。部分僅提供查詢展示的功能,對分析問題排查問題支持不足。 摘要: 分布式系統(tǒng)的運維挑戰(zhàn) 容器、Serverless 編程方式的誕生極大提升了軟件交付與部署的效率。在架構(gòu)的演化過程中,可以看到兩個變化: 應用架構(gòu)開始從單體系統(tǒng)逐步轉(zhuǎn)變?yōu)槲⒎?..
摘要:典型實現(xiàn)不同的監(jiān)控模塊,側(cè)重于不同領(lǐng)域,有著不同的職責。指標收集方面,支持多樣化的組件將被優(yōu)先下使用。以上談了這么多,僅僅是聊了一下收集方面而已。 更多文章,請移步微信公眾號《小姐姐味道》 mp原文 https://mp.weixin.qq.com/s?__...監(jiān)控是分布式系統(tǒng)的必備組件,能夠起到提前預警、問題排查、評估決策等功效,乃行走江湖、居家必備之良品。 監(jiān)控系統(tǒng)概要 功能劃分...
摘要:典型實現(xiàn)不同的監(jiān)控模塊,側(cè)重于不同領(lǐng)域,有著不同的職責。指標收集方面,支持多樣化的組件將被優(yōu)先下使用。以上談了這么多,僅僅是聊了一下收集方面而已。 更多文章,請移步微信公眾號《小姐姐味道》 mp原文 https://mp.weixin.qq.com/s?__...監(jiān)控是分布式系統(tǒng)的必備組件,能夠起到提前預警、問題排查、評估決策等功效,乃行走江湖、居家必備之良品。 監(jiān)控系統(tǒng)概要 功能劃分...
摘要:,托管于騰訊云容器平臺容器編排工具。適配我們目前的服務部署在騰訊云托管,節(jié)點使用核的網(wǎng)絡增強型機器,所有的后端服務都以部署,集群外部署高可用支持集群內(nèi)服務發(fā)現(xiàn),數(shù)據(jù)庫以為主,消息隊列采用。 距離2017年的見聞技術(shù)架構(gòu)調(diào)整接近2年,隨著業(yè)務線的發(fā)展,見聞技術(shù)部的項目數(shù)量、項目架構(gòu)類型、基礎設施規(guī)模、服務變更頻率都在不斷地增長,帶給SRE的挑戰(zhàn)是如何能更快地助力于開發(fā)人員更快更穩(wěn)定地部署...
閱讀 2520·2023-04-25 17:37
閱讀 1203·2021-11-24 10:29
閱讀 3709·2021-09-09 11:57
閱讀 704·2021-08-10 09:41
閱讀 2256·2019-08-30 15:55
閱讀 2822·2019-08-30 15:54
閱讀 1951·2019-08-30 15:53
閱讀 906·2019-08-30 15:43