Spring Cloud Sleuth和zipkin微服務跟蹤
Spring Cloud Sleuth是為Spring Cloud實現了分散式追蹤解決方案。
Spring Cloud Sleuth借用了Dapper的術語:
跨度(Span):基本的工作單位。例如,傳送一個RPC是一個新的跨度,就像向RPC傳送響應一樣。跨度由跨度的唯一64位ID和跨度所包含的另一個 64位ID標識。Spans還具有其他資料,例如描述,時間戳事件,鍵值註釋(標記),導致它們的跨度的ID以及程序ID(通常為IP地址)。
跨度啟動和停止,並跟蹤他們的時間資訊。一旦你建立了一個跨度,你必須在將來某個時候停止它。
開始追蹤的初始跨度被稱為 root span。該跨度的span id的值等於trace id。
痕跡(Trace):一組形成樹狀結構的跨度。例如,如果您正在執行分散式大資料儲存,則跟蹤可能由放入請求組成。
標註(Annotation):用於及時記錄事件的存在。用於定義請求開始和結束的一些核心註釋是:
-
cs - 客戶端傳送 - 客戶端發出請求。這個註釋描述了跨度的開始。
-
sr - 伺服器已收到 - 伺服器端收到請求並開始處理。如果從這個時間戳中減去cs時間戳,將會收到網路延遲。
-
ss - 伺服器傳送 - 在請求處理完成時(當響應被髮送回客戶端時)註釋。如果從這個時間戳中減去sr時間戳,將會收到伺服器端處理請求所需的時間。
-
cr - 客戶端收到 - 表示跨度結束。客戶端已經成功接收到伺服器端的響應。如果從這個時間戳中減去cs時間戳,那麼將會收到客戶端接收伺服器響應所需的全部時間。
Span和Trace在系統中與Zipkin Annotation一起顯示的視覺化示例:
Zipkin:
官方介紹:Zipkin是一個分散式追蹤系統。它有助於收集解決微服務架構中延遲問題所需的時序資料。它管理這些資料的收集和查詢。
應用程式用於向Zipkin報告時間資料。Zipkin UI還提供了一個依賴關係圖,顯示每個應用程式有多少跟蹤請求。如果你正在解決延遲問題或錯誤問題,則可以根據應用程式,跟蹤長度,註釋或時間戳過濾或排序所有跟蹤。一旦選擇了一個跟蹤,你可以看到每個跨度所花費的總跟蹤時間的百分比,從而可以確定問題應用程式。
在SpringCloud中使用Zipkin:
1.springcloud建立zipkin-server
依賴除了springcloud的基礎依賴外再新增zipkin依賴,如下
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-autoconfigure-ui</artifactId>
</dependency>
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-server</artifactId>
</dependency>
啟動類新增標籤@EnableZipkinServer啟動zipkin,程式碼如下
/**
* @author wxy
*/
@SpringBootApplication
@EnableZipkinServer
@EnableEurekaClient
public class ZipKinServerApplication {
public static void main(String[] args) {
SpringApplication.run(ZipKinServerApplication.class, args);
}
}
配置檔案,如下
spring:
application:
name: micoserice-zipkin-server
server:
port: 9994
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
instance:
instance-id: ${spring.application.name}:${server.port}
prefer-ip-address: true
啟動後可直接訪問localhost:9994,可看到zipkin的頁面
除了這種方式還可通過docker安裝,可檢視教程https://github.com/openzipkin/zipkin
2.為微服務提供者消費者新增zipkin依賴和配置
新增依賴
<!-- zipkin依賴jar-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
新增配置
spring:
zipkin:
base-url: http://localhost:9994
sleuth:
sampler:
percentage: 1.0
spring.sleuth.sampler.percentage 是監控的百分比,預設的是0.1表示10%,這裡給1.0表示全部監控
spring.zipkin.base-url:是zipkin-server的服務路徑
依次啟動服務如下
我這裡啟動了zuul,ribbon以及user服務,通過zuul網管依次訪問ribbon和user,檢視zipkin如下圖:
示例程式碼:https://github.com/xiaoyangW/SpringCloud/tree/master/microservice-sleuth-zipkin-server
參考文件
http://cloud.spring.io/spring-cloud-static/Edgware.SR1/multi/multi__introduction.html
http://www.ityouknow.com/springcloud/2018/02/02/spring-cloud-sleuth-zipkin.html