乙個請求完整的呼叫鏈可能如下圖,經過多個系統服務,呼叫關係複雜。
期間我們會關注各個呼叫的各項效能指標,比如吞吐量(tps)、響應時間及錯誤記錄等。
全鏈路效能監控從整體維度到區域性維度展示各項指標,將跨應用的所有呼叫鏈效能資訊集中展現,可方便度量整體和區域性效能,並且方便找到故障產生的源頭,生產上可極大縮短故障排除時間。
系統整個呼叫鏈
1. 當使用者發起乙個請求時,首先到達前端a服務,然後分別對b服務和c服務進行rpc呼叫;
2. b服務處理完給a做出響應,但是c服務還需要和後端的d服務和e服務互動之後再返還給a服務,最後由a服務來響應使用者的請求;
對整個呼叫過程的追蹤
1. 請求到來生成乙個全域性traceid,通過traceid可以串聯起整個呼叫鏈,乙個traceid代表一次請求。
2. 除了traceid外,還需要spanid用於記錄呼叫父子關係。每個服務會記錄下parent id和span id,通過他們可以組織一次完整呼叫鏈的父子關係。
3. 乙個沒有parent id的span成為root span,可以看成呼叫鏈入口。
4. 所有這些id可用全域性唯一的64位整數表示;
5. 整個呼叫過程中每個請求都要透傳traceid和spanid。
6. 每個服務將該次請求附帶的traceid和附帶的spanid作為parent id記錄下,並且將自己生成的spanid也記錄下。
7. 要檢視某次完整的呼叫則只要根據traceid查出所有呼叫記錄,然後通過parent id和span id組織起整個呼叫父子關係。
* 通過agent生成呼叫鏈日誌。
* 通過logstash採集日誌到kafka。
* kafka負責提供資料給下游消費。
* storm計算匯聚指標結果並落到es。
* storm抽取trace資料並落到es,這是為了提供比較複雜的查詢。比如通過時間維度查詢呼叫鏈,可以很快查詢出所有符合的traceid,根據這些traceid再去hbase查資料就快了。
* logstash將kafka原始資料拉取到hbase中。hbase的rowkey為traceid,根據traceid查詢是很快的。
通過agent**的無侵入式部署,將效能測量與業務邏輯完全分離,可以測量任意類的任意方法的執行時間,這種方式大大提高了採集效率,並且減少運維成本。根據服務跨度主要分為兩大類agent:
比如生成的資料格式如下:
分布式呼叫鏈跟蹤系統 Zipkin
官網 github 英語 tracer,概念 範疇 分布式呼叫鏈跟蹤系統,或分布式鏈路呼叫監控系統。trace span zipkin 以 trace 結構表示對一次請求的追蹤,又把每個 trace 拆分為若干個有依賴關係的 span。span 模型 在微服務架構中,一次使用者請求可能會由後台若干個...
分布式鏈路呼叫跟蹤系統
一.為什麼需要分布式呼叫跟蹤 隨著分布式服務架構的流行,特別是微服務等設計理念在系統中的應用,系統架構變得越來越分散,如下圖所示 分布式服務拆分以後,系統變得日趨複雜,業務的呼叫鏈也越來越長,如何快速定位線上故障,就需要依賴分布式呼叫跟蹤技術。可以看到,隨著服務的拆分,系統的模組變得越來越多,不同的...
skywalking分布式呼叫鏈
部署 elasticsearch 修改elasticsearch.yml檔案 設定 cluster.name collectordbcluster。此名稱需要和collector配置檔案一致。設定 node.name anyname,可以設定為任意名字,如elasticsearch為集群模式,則每個...