Spring Cloud Alibaba 實戰(十三) – Sleuth調用鏈監控
- 2019 年 12 月 17 日
- 筆記
本文概要:大白話剖析調用鏈監控原理,然後學習Sleuth,Zipkin,然後將Sleuth整合Zipkin,最後學習Zipkin數據持久化(Elasticsearch)以及Zipkin依賴關係圖
- 實戰至此,基本功能已經全部實現

1 剖析調用鏈監控原理
如果我們的項目出現異常了,怎麼辦呢?
1.1 問題定位需求
◆ 跨微服務的API調用發生異常,要求快速定位(比如5分鐘以內)出問題出在哪裡,該怎麼辦? ◆ 跨微服務的API調用發生性能瓶頸,要求迅速定位(比如5分鐘以內)出系統瓶頸,該怎麼辦?
對於這兩種情況,傳統方式很難解決,需要調用鏈監控工具排查(有點類似於Linux內核的調用棧日誌哦)
調用鏈監控工具可謂分佈式項目維護的必備工具!
1.2 監控的基本原理
- 譬如說,對於本項目,監控如下請求

- 定義如下4個時間節點

- 在DB中維護了一張自關聯型數據trace表: 唯一標識,父spanid,服務名稱,調用的API,四個時間節點的階段,數據發生的時間戳

如此一來,正常情況下,一次調用,DB會生成四條數據,即可知道哪個階段發生問題!
2 優雅地使用 Sleuth
2.1 何為 Sleuth

- 官方定位 : Sleuth是一 個Spring Cloud的分佈式跟蹤解決方案 講人話就是調用鏈監控工具的客戶端
2.2 術語條目
Span (跨度)
Sleuth的基本工作單元,它用一個64位的id唯一標識。 除ID外,span還包含其他數據,例如描述、時間戳事件、鍵值對的註解(標籤)、span ID、span父ID等。
前面我們DB中的一條數據就是一個span
trace (跟蹤)
一組span組成的樹狀結構稱為trace
即DB中完整的四條數據
Annotation (標註)
● CS ( Client Sent客戶端發送) 客戶端發起一一個請求,該annotation描述了span的開始。 ●SR ( Server Received服務器端接收) 服務器端獲得請求並準備處理它。 ●SS( Server Sent服務器端發送) 該annotation表明完成請求處理(當響應發回客戶端時)。 ●CR( Client Received客戶端接收) span結束的標識。客戶端成功接收到服務器端的響應。
2.3 為用戶中心整合Sleuth
- 添加依賴


然後直接啟動服務即可3 Zipkin搭建與整合 3.1 何為Zipkin Zipkin是Twitter開源的分佈式跟蹤系統,主要用來收集系統的時序數據,從而追蹤系統的調用問題
3.2 搭建 Zipkin Server
Zipkin Server的 API兼容性(微服務通過集成reporter模塊,從而Zipkin Server通信) 非常好,對於Spring Cloud Greenwich,Zipkin Server只需安裝2.x即可。
- 下載 : Zipkin官方的Shell下載最新版本curl -sSL https://zipkin.io/quickstart.sh | bash -s 之後 java -jar啟動 可看到也是一個SpringBoot應用


- 查看9411端口
http://localhost:9411/zipkin/

- 添加依賴,由於zipkin已經包含sleuth,所以移除那個依賴



抽樣是為了減少性能損失,默認是只上報0.1的trace數據 調用請求後,zipkin:



- 由於該請求客戶端是瀏覽器,而其沒有集成sleuth,不上報zipkin,所以不顯示

4 整合Zipkin之後Nacos報錯解決
- 推薦閱讀 解決Spring Cloud Alibaba/Spring Cloud整合Zipkin之後的報錯問題5 為所有微服務整合Zipkin 對內容中心和網關都按照前面用戶中心的步驟整合即可
6 Zipkin數據持久化(Elasticsearch)
- Elasticsearch的下載安裝參閱 Elasticsearch 實戰(三) – Mac OS上安裝和啟動Elasticserch, Kibana
- Zipkin提供了很多的環境變量

配置環境變量,即可把數據存入ES
STORAGE_TYPE=elasticsearch ES_HOSTS=localhost:9200 java -jar zipkin.jar

7 依賴關係圖
- 一般情況下,是不會顯示依賴圖的

- 對此,官方有給出說明

- 使用了ES就需要使用zipkin-dependencies

- Zipkin Dependencies使用Elasticsearch的環境變量

- 開始下載
curl -sSL https://zipkin.io/quickstart.sh | bash -s io.zipkin.dependencies:zipkin-dependencies:LATEST zipkin-dependencies.jar
- 啟動
STORAGE_TYPE=elasticsearch ES_HOSTS=localhost:9200 java -jar zipkin-dependencies.jar

- 現在就展示依賴圖了!實際可以配置定時任務

Zipkin Dependencies指定分析日期
#分析昨天的數據 (OS/X下的命令) STORAGE_ TYPE=elasticsearch java -jar zipkin-dependencies.jar `date -uv-ld +%F` #分析昨天的數據 (Linux下的命令) STORAGE_ TYPE=elasticsearch java -jar zipkin-dependencies.jar `date -u -d '1 day ago' +%F` #分析指定日期的數據 STORAGE TYPE=elasticsearch java -jar zipkin-dependencies.jar 2019-12-25