Sleuth+Zipkin用來實現分佈式系統的鏈路追蹤。html
Sleuth組件用於日誌埋點、記錄鏈路數據,Zipkin組件用於展現鏈路數據。java
(1)建立消費者、提供者時勾選Spring Cloud Tracing -> Sleuthspring
也能夠手動添加依賴:瀏覽器
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-sleuth</artifactId> </dependency>
(2)在消費者、提供者處理業務的類中添加成員變量緩存
//使用的是slf4j的日誌,不要導錯了
private final Logger logger = LoggerFactory.getLogger(this.getClass());
在處理業務的方法中(消費者調用提供者、提供者處理業務的方法中),輸出日誌springboot
logger.info("正在執行user-service的findOrdersByUserId方法,調用服務order-service");
內容根據須要修改。服務器
Sleuth輸出的日誌每每是空的,只輸出服務名:[order-service,,,]網絡
第(2)步是爲了解決此問題,使Sleuth輸出的日誌有內容。多線程
[order-service,cd99e95b12d13310,b6e08d7f788441bf,false]app
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頁面可看到鏈路各部分的耗時狀況,優化耗時多的部分,好比加多線程、異步、緩存。