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