SpringCloud組件之服務鏈路追蹤Sleuth(Hoxton版本)

1.Spring Cloud Sleuth簡介

Add sleuth to the classpath of a Spring Boot application (see below for Maven and Gradle examples), and you will see the correlation data being collected in logs, as long as you are logging requests. —— 摘自官網

Spring Cloud Sleuth 是分佈式系統中跟蹤服務間調用的工具,它可以直觀地展示出一次請求的調用過程,本文將對其用法進行詳細介紹。並且兼容支持了 zipkin,你只需要在pom文件中引入相應的依賴即可。並且兼容支持了 zipkin,你只需要在pom文件中引入相應的依賴即可。

1.1服務追蹤分析

微服務架構上通過業務來劃分服務的,通過REST調用,對外暴露的一個接口,可能需要很多個服務協同才能完成這個接口功能,如果鏈路上任何一個服務出現問題或者網絡超時,都會形成導致接口調用失敗。隨着業務的不斷擴張,服務之間互相調用會越來越複雜。

隨着服務的越來越多,對調用鏈的分析會越來越複雜。它們之間的調用關係也許如下:

1.2相關術語

  • Span:基本工作單元,例如,在一個新建的span中發送一個RPC等同於發送一個迴應請求給RPC,span通過一個64位ID唯一標識,trace以另一個64位ID表示,span還有其他數據信息,比如摘要、時間戳事件、關鍵值註釋(tags)、span的ID、以及進度ID(通常是IP地址) span在不斷的啓動和停止,同時記錄了時間信息,當你創建了一個span,你必須在未來的某個時刻停止它。
  • Trace:一系列spans組成的一個樹狀結構,例如,如果你正在跑一個分佈式大數據工程,你可能需要創建一個trace。
  • Annotation:用來及時記錄一個事件的存在,一些核心annotations用來定義一個請求的開始和結束
    1. cs - Client Sent -客戶端發起一個請求,這個annotion描述了這個span的開始
    2. sr - Server Received -服務端獲得請求並準備開始處理它,如果將其sr減去cs時間戳便可得到網絡延遲
    3. ss - Server Sent -註解表明請求處理的完成(當請求返回客戶端),如果ss減去sr時間戳便可得到服務端需要的處理請求時間
    4. cr - Client Received -表明span的結束,客戶端成功接收到服務端的回覆,如果cr減去cs時間戳便可得到客戶端從服務端獲取回覆的所有所需時間 將Span和Trace在一個系統中使用Zipkin註解的過程圖形化: 將Span和Trace在一個系統中使用Zipkin註解的過程圖形化:

2.構建演示工程

2.1環境準備

本文演示工程使用之前文章中的工程改造,包括spring-cloud-eureka-server,spring-cloud-eureka-client-provider,spring-cloud-feign-demo,先啓動Eureka註冊中心spring-cloud-eureka-server。

2.2改造工程集成zipkin

spring-cloud-eureka-client-provider,spring-cloud-feign-demo 兩個工程中增加zipkin相關依賴

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>

修改application.yml文件,添加如下

spring:
  zipkin:
    base-url: http://localhost:9411
    #設置Sleuth的抽樣收集概率
  sleuth:
    sampler:
      probability: 0.1

2.3整合Zipkin獲取及分析日誌

Zipkin是Twitter的一個開源項目,可以用來獲取和分析Spring Cloud Sleuth 中產生的請求鏈路跟蹤日誌,它提供了Web界面來幫助我們直觀地查看請求鏈路跟蹤信息。 SpringBoot 2.0以上版本已經不需要自行搭建zipkin-server,我們可以從該地址下載zipkin-server:http://repo1.maven.org/maven2/io/zipkin/java/zipkin-server/2.9.4/zipkin-server-2.9.4-exec.jar 下載完成後,執行如下命令啓動

java -jar zipkin-server-2.9.4-exec.jar

Zipkin頁面訪問地址:http://127.0.0.1:9411

啓動spring-cloud-eureka-client-provider,spring-cloud-feign-demo兩個工程,多次調用(Sleuth爲抽樣收集)接口http://localhost:9003/feign/test1?name=Trazen ,調用完後查看Zipkin首頁發現已經有請求鏈路跟蹤信息了。

點擊查看詳情可以直觀地看到請求調用鏈路和通過每個服務的耗時:

點擊依賴,可以發現服務的依賴關係

3.項目git地址

https://github.com/ty1972873004/spring-cloud-demo

4.參考文檔

  • https://github.com/spring-cloud/spring-cloud-sleuth
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章