1. 程式人生 > >Spring Cloud Sleuth和zipkin微服務跟蹤

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時間戳,那麼將會收到客戶端接收伺服器響應所需的全部時間。

SpanTrace在系統中與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

    https://zipkin.io/