一、前言
Spring Cloud Sleuth 主要功能就是在分布式系統中提供追蹤解決方案 ,並且兼容了zipkin,提供了REST API接口來輔助我們查詢跟蹤數據以實現對分布式系統的監控程序 。
Sleuth 是個組件,沒有提供我們可視化的界面,和一些相信的api信息,而zipkin 是個系統,他有可視化的界面,和對應接口調用詳細的信息情況。
二、為什么要使用鏈路追蹤
微服務架構上通過業務來划分服務的,通過REST調用,對外暴露的一個接口,可能需要很多個服務協同才能完成這個接口功能,如果鏈路上任何一個服務出現問題或者網絡超時,都會形成導致接口調用失敗。隨着業務的不斷擴張,服務之間互相調用會越來越復雜。
,對調用鏈的分析會越來越復雜。如果那里出現了錯誤,我們是很排查的。所以我們引入了鏈路追蹤,使用可視化的界面我們可以很容易的找到那一塊耗時多,等等。
Sleuth 的使用:
1.在項目中加入依賴:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
2.然后在你想打印日志的地方輸入
控制台會出現下面這個 (現在看起來是不是感覺使用起來也不怎方便,下面我會講zipkin,他提供了可視化界面,看的就清楚多了。)
[order-service,96f95a0dd81fe3ab,852ef4cfcdecabf3,false]
1、第一個值,spring.application.name的值
2、第二個值,96f95a0dd81fe3ab ,sleuth生成的一個ID,叫Trace ID,用來標識一條請求鏈路,一條請求鏈路中包含一個Trace ID,多個Span ID
3、第三個值,852ef4cfcdecabf3、spanid 基本的工作單元,獲取元數據,如發送一個http
4、第四個值:false,是否要將該信息輸出到zipkin服務中來收集和展示。
3、可視化鏈路追蹤系統Zipkin
大規模分布式系統的APM工具(Application Performance Management),基於Google Dapper的基礎實現,和sleuth結合可以提供可視化web界面分析調用鏈路耗時情況
3.1 可視化鏈路追蹤系統Zipkin部署。(我使用的是docker 我后面會講下docker的部署,很簡單的)
//阿里提供的部署Zipkin的方法,里面講了好幾種 包括java 部署 和docker 部署
docker部署:
docker run -d -p 9411:9411 openzipkin/zipkin
這樣就搞定了 ,然后ip+端口就能訪問:
3.2 代碼中的使用。
那個項目想要鏈路追蹤就都加入下面的兩個配置
3.1.1 加入依賴
<!--里面包含 spring-cloud-starter-sleuth、spring-cloud-sleuth-zipkin ->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
3.1.1 配置文件添加
#服務的名稱
spring:
application:
name: order-service
#zipkin服務所在地址
zipkin:
base-url: http://47.XX.XX.XX:9411/
#配置采樣百分比,開發環境可以設置為1,表示全部,生產就用默認(0.1)
sleuth:
sampler:
probability: 1
3.2 測試
調用 api 接口
查看Zipkin 可視化系統
這樣詳細信息就全部追蹤到了。
3.4 大致說下 Sleuth 和Zipkin 是怎么調用的.
sleuth收集跟蹤信息通過http請求發送給zipkin server,zipkinserver進行跟蹤信息的存儲以及提供Rest API即可,Zipkin UI調用其API接口進行數據展示
默認存儲是內存,可也用mysql、或者elasticsearch等存儲。 所以說,Sleuth 才是根本,而Zipkin 這是進行了對數據的分析和展示。