Sleuth+Zipkin用來實現分散式系統的鏈路追蹤。 Sleuth組件用於日誌埋點、記錄鏈路數據,Zipkin組件用於展示鏈路數據。 Sleuth的使用 (1)創建消費者、提供者時勾選Spring Cloud Tracing -> Sleuth 也可以手動添加依賴: <dependency> < ...
Sleuth+Zipkin用來實現分散式系統的鏈路追蹤。
Sleuth組件用於日誌埋點、記錄鏈路數據,Zipkin組件用於展示鏈路數據。
Sleuth的使用
(1)創建消費者、提供者時勾選Spring Cloud Tracing -> Sleuth
也可以手動添加依賴:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-sleuth</artifactId> </dependency>
(2)在消費者、提供者處理業務的類中添加成員變數
//使用的是slf4j的日誌,不要導錯了
private final Logger logger = LoggerFactory.getLogger(this.getClass());
在處理業務的方法中(消費者調用提供者、提供者處理業務的方法中),輸出日誌
logger.info("正在執行user-service的findOrdersByUserId方法,調用服務order-service");
內容根據需要修改。
Sleuth輸出的日誌往往是空的,只輸出服務名:[order-service,,,]
第(2)步是為瞭解決此問題,使Sleuth輸出的日誌有內容。
[order-service,cd99e95b12d13310,b6e08d7f788441bf,false]
- 第一個是spring.application.name,服務名
- 第二個是sleuth生成的Trace ID,唯一標識一條請求鏈路
- 第三個是sleuth生成的Span ID,Span ID是鏈路的基本單元,標識一個http請求的元數據,比如一個服務調用產生的http請求。1條鏈路中包含1個Trace ID、多個Span ID。
- 第四個表示是否會將該信息傳輸到zipkin服務中收集、展示,配置了zipkin就是true,沒配置就是false
zipkin的使用
zipkin是大規模分散式系統的一個APM工具(Application Performance Management),基於Google Dapper實現,搭配sleuth可以實現可視化的鏈路調用分析。
APM工具常用的還有EagleEye 鷹眼、CAT。
zipkin組成:Collector、Storage、Restful API、Web UI組成。
(1)搭建zipkin伺服器
https://zipkin.io/pages/quickstart.html 提供的方式下載速度都很慢,不推薦
到下麵的地址直接下載編譯打包好的jar,下載的是最新版的zipkin:
https://search.maven.org/remote_content?g=io.zipkin&a=zipkin-server&v=LATEST&c=exec
zipkin是springboot項目,運行jar需要jdk環境,如果沒有配置jdk環境的需要先配置jdk環境。
雙擊jar運行(在Linux上可以使用java -jar命令來運行),瀏覽器地址欄輸入 127.0.0.1:9411 進入zipkin頁面,ip是zipkin所在機器的ip,zipkin預設使用的埠時9411。
(2)創建消費者、生產者時勾選Spring Cloud Tracing -> Zipkin Client
也可以手動加依賴:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zipkin</artifactId> </dependency>
(3)在消費者、提供者中添加配置
spring:
application:
#服務名稱
name: order-service
zipkin:
#zipkin伺服器的地址,sleuth會將鏈路數據傳輸到zipkin伺服器,預設是localhost:9411
base-url: 192.168.1.9:9411
sleuth:
sampler:
#採樣率,0-1上的小數,比如0.5是將sleuth 50%的鏈路的數據傳輸給zipkin
probability: 1.0
採樣率以前我搞的時候預設是0.1,現在的預設值似乎好像是1.0(不確定),開發的時候可以設置大些,上線的時候設置小些,
因為採樣太多很占網路帶寬,而且zipkin把採樣的鏈路數據直接存儲在記憶體中(定時清理),採樣率太高zipkin伺服器會很占機器記憶體。
啟動應用,調用服務,在zipkin頁面可看到鏈路各部分的耗時情況,優化耗時多的部分,比如加多線程、非同步、緩存。