sleuth + zipkin 鏈路分析
sleuth + zipkin 鏈路分析
sleuth 鏈路跟蹤
隨著系統規模越來越大,微服務之間呼叫關係變得錯綜複雜,一條呼叫鏈路中可能呼叫多個微服務,任何一個微服務不可用都可能造整個呼叫過程失敗
spring cloud sleuth 可以跟蹤呼叫鏈路,分析鏈路中每個節點的執行情況
1. 新增 sleuth 依賴
在每個服務和zuul專案中新增sleuth
依賴
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-sleuth</artifactId> </dependency>
然後我們使用zuul訪問業務層, 就能看到業務的呼叫流程, 會看到鏈路訪問控制檯的輸出資訊
[服務id,請求id,span id,是否傳送到zipkin]
- 請求id:請求到達第一個微服務時生成一個請求id,該id在呼叫鏈路中會一直向後面的微服務傳遞
- span id:鏈路中每一步微服務呼叫,都生成一個新的id
[zuul,6c24c0a7a8e7281a,**6c24c0a7a8e7281a**,false] [order-service,6c24c0a7a8e7281a,**993f53408ab7b6e3**,false] [item-service,6c24c0a7a8e7281a,**ce0c820204dbaae1**,false] [user-service,6c24c0a7a8e7281a,**fdd1e177f72d667b**,false]
zipkin 鏈路分析
zipkin 可以收集鏈路跟蹤資料,提供視覺化的鏈路分析
分析可分為2中:
- 使用訊息佇列轉發 (推薦)
- 使用zipkin直接獲取
使用RabbitMQ轉發圖解:
zipkin相當於RabbitMQ的消費者, 其他業務服務為提供者
鏈路資料抽樣比例
預設 10% 的鏈路資料會被髮送到 zipkin 服務。可以配置修改抽樣比例
spring:
sleuth:
sampler:
probability: 0.1
準備前提
已經匯入了sleuth鏈路跟蹤的依賴
1. 新增依賴
新增兩個依賴到伺服器和zuul專案中Zipkin Client
, Spring for RabbitMQ
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
如果配置了spring cloud bus依賴, 無序再新增RabbitMQ的依賴
2. 配置檔案
在業務服務和zuul配置檔案中假如RabbitMQ的配置和zipkin的轉發型別配置
如果不配置zipkin的轉發型別, 預設是直接獲取業務服務的呼叫資訊, 配置了rabbitMQ會使用RabbitMQ轉發獲取
spring
rabbitmq:
host: aarons.top
port: 5672
username: admin
password: admin
# virtual-host: /wht
zipkin:
sender:
type: rabbit # zipkin傳送型別
3. 下載zipkin伺服器
github: https://github.com/openzipkin/zipkin
4. 啟動zipkin
啟動 zipkin 時,連線到 rabbitmq
使用命令啟動下載下來的jar包 (一行命令, ip和埠, 使用者名稱密碼等改為自己的RabbitMQ的相關資訊)
java -jar zipkin-server-2.12.9-exec.jar --zipkin.collector.rabbitmq.uri=amqp://admin:[email protected]:5672
5. 訪問zipkin頁面
http://localhost:9411/zipkin/ 修改為自己的ip進行訪問
6. 測試
訪問zuul來訪問其他的服務業務, 然後登陸RabbitMQ, 如果有資料波動, 說明配置成功