分散式鏈路監控與追蹤產生背景
在微服務系統中,隨著業務的發展,系統會變得越來越大,那麼各個服務之間的呼叫關係也就變得越來越複雜。一個 HTTP 請求會呼叫多個不同的微服務來處理返回最後的結果,在這個呼叫過程中,可能會因為某個服務出現網路延遲過高或傳送錯誤導致請求失敗,這個時候,對請求呼叫的監控就顯得尤為重要了。Spring Cloud Sleuth 提供了分散式服務鏈路監控的解決方案
服務與服務之間呼叫關係
鏈路指的:一串聯多個服務組成一個流程 呼叫鏈關係
Zipkin框架介紹Zipkin 是 Twitter 的一個開源專案,它基於 Google Dapper 實現的。我們可以使用它來收集各個伺服器上請求鏈路的跟蹤資料,並通過它提供的 REST API 介面來輔助查詢跟蹤資料以實現對分散式系統的監控程式,從而及時發現系統中出現的延遲過高問題。除了面向開發的 API 介面之外,它還提供了方便的 UI 元件來幫助我們直觀地搜尋跟蹤資訊和分析請求鏈路明細,比如可以查詢某段時間內各使用者請求的處理時間等。
Zipkin 和 Config 結構類似,分為服務端 Server,客戶端 Client,客戶端就是各個微服務應用。
原理圖:
Zipkin環境搭建在 Spring Boot 2.0 版本之後,官方已不推薦自己搭建Zipkin服務端了,而是直接提供了編譯好的 jar 包。詳情可以檢視官網:https://zipkin.io/pages/quickstart.html
注意:zipkin官網已經提供定製了,使用官方jar執行即可。
預設埠號啟動zipkin服務
java –jar zipkin.jar 預設埠號; 9411
http://192.168.18.220:9411
指定埠號啟動9411
java -jar zipkin.jar --server.port=8080
http://192.168.18.220:8080
ZipkinClient整合Maven依賴<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
application.ymlspring:
application:
name: app-itmayiedu-member
zipkin:
base-url: http://192.168.18.220:9411/
###全部採集
sleuth:
sampler:
probability: 1.0
ZipkinClient整合rabbitMQ<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream-binder-rabbit</artifactId>
</dependency>
ymlspring:
application:
name: app-itmayiedu-order
zipkin:
base-url: http://192.168.18.220:9411/
### 預設可以不用寫
rabbitmq:
####連線地址
host: 127.0.0.1
####埠號
port: 5672
####賬號
username: guest
####密碼
password: guest
###全部採集
sleuth:
sampler:
probability: 1.0
request.getHeader("X-B3-TraceId");
request.getHeader("X-B3-TraceId")+",spanid:"+ request.getHeader("X-B3-SpanId")