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/

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章