服務鏈路跟蹤:Sleuth+Zipkin


配套資料,免費下載
鏈接:https://pan.baidu.com/s/1la_3-HW-UvliDRJzfBcP_w
提取碼:lxfx
複製這段內容後打開百度網盤手機App,操作更方便哦


第一章 Sleuth+Zipkin介紹

1.1、什麼是Sleuth

我們已經接觸過幾種微服務的監控方式,比如:Spring Boot Actuator監控微服務,Spring Boot Admin也是監控微服務,他是把Actuator的數據用可視化的方式呈現出來,Hystrix Dashboard監控Hystrix服務,Hystrix Turbine聚合多個Hystrix服務的監控信息等,接下來我們要討論的是微服務的“跟蹤"。

對於一個大型的幾十個、幾百個微服務構成的微服務架構系統,通常會遇到下面一些問題,比如:

  • 如何串聯整個調用鏈路,快速定位問題?
  • 如何理清各個微服務之間的依賴關係?
  • 如何進行各個微服務接口的性能分折?
  • 如何跟蹤整個業務流程的調用處理順序?

Spring Cloud Sleuth爲Spring Cloud提供了分佈式跟蹤的解決方案,它大量借用了Google Dapper、Twitter Zipkin和Apache HTrace的設計,幫我們解決像上面提到的問題。Spring Cloud Sleuth可以追蹤10種類型的組件:async、Hystrix,messaging,WebSocket,rxjava,scheduling,Web(Spring MVC Controller,Servlet),WebClient(Spring RestTemplate)、Feign/OpenFegin、Zuul;

Spring Cloud Sleuth對於分佈式鏈路的跟蹤僅僅是生成一些數據,這些數據不便於人類閱讀,所以我們一般把這種跟蹤數據上傳給Zipkin Server,由Zipkin通過UI頁面統一進行數據的展示。

官方文檔地址:https://docs.spring.io/spring-cloud-sleuth/docs/2.2.6.RELEASE/reference/html/

我們通過一張圖來了解一個簡單的微服務的調用鏈路:

span(跨度)

span(跨度)是一個基本工作單元,span用一個64位的id唯一標識。除id外,span還包含其他數據,例如描述、時間戳事件、鍵值對的註解(標籤), spanId、parentId等。span被啓動和停止時,記錄了時間信息。初始化 span被稱爲"rootspan",該span的id和trace的id相等。

trace(跟蹤)

trace(跟蹤)是一組共享"rootspan"的span組成的樹狀結構,trace也用一個64位的id唯一標識,trace中的所有span都共享該trace的id。

annotation(標註)

annotation(標註)用來記錄事件的存在,其中,核心annotation用來定義請求的開始和結束。

CS(Client Sent客戶端發送)

客戶端發起一個請求,該annotation描述了span的開始。

SR(Server Received服務器端接收)

服務器端獲得請求並準備處理它。如果用SR減去CS時間戳,就能得到網絡延遲。

SS(Server Sent服務器端發送)

該annotation表明完成請求處理(當響應發回客戶端時)。如果用SS減去SR時間戳,就能得到服務器端處理請求所需的時間。

CR(Client Received客戶端接收)

客戶端發起一個請求,該annotation描述了span的結束。客戶端成功接收到服務器端的響應。如果CR減去CS時間戳,就能得到從客戶端發送請求到服務器響應的所需的時間。

1.2、什麼是Zipkin

Zipkin是Twitter開源的分佈式實時數據跟蹤系統(Distributed Tracking System),基於Google Dapper的論文設計而成,Google開源了 Dapper鏈路追蹤組件,並在2010年發表了論文《Dapper, a Large-Scale Distributed Systems Tracing Infrastructure》,這篇文章是業內實現鏈路追蹤的標杆和理論基礎,具有非常大的參考價值。

Zipkin它的主要功能是收集系統的時序數據,從而追蹤微服務架構的系統延時等問題,從而達到鏈路調用監控跟蹤作用,另外Zipkin還提供了一個非常友好的UI界面,來幫助分析追蹤數據。除此之外,Zipkin提供了可插拔數據存儲方式:In-Memory、MySql、Cassandra以及Elasticsearch。

Zipkin官網地址:http://zipkin.io

分佈式跟蹤系統有一些成熟的開源產品,比如:韓國Naver的Pinpoint,Apache的HTrace,阿里的鷹眼EagleEye,京東的Hydra等,這些產品我們也把他們叫做APM(應用性能管理)工具。

下圖展示了Zipkin的基礎架構,它主要由4個核心組件構成:

  • Collector:收集器組件,它主要用於處理從外部系統發送過來的跟蹤信息,將這些信息轉換爲Zipkin內部處理的Span格式,以支持後續的存儲、分析、展示等功能。
  • Storage:存儲組件,它主要對處理收集器接收到的跟蹤信息,默認會將這些信息存儲在內存中,我們也可以修改此存儲策略,通過使用其他存儲組件將跟蹤信息存儲到數據庫中。
  • RESTful API:API 組件,它主要用來提供外部訪問接口。比如給客戶端展示跟蹤信息或是外接系統訪問以實現監控等。
  • Web UI:UI 組件,基於 API 組件實現的上層應用,通過 UI 組件用戶可以方便而有直觀地查詢和分析跟蹤信息。

Zipkin分爲兩端,一個是Zipkin服務端,一個是Zipkin客戶端,客戶端也就是微服務的應用。客戶端會配置服務端的URL地址,一旦發生服務間的調用的時候,會被配置在微服務裏面的Sleuth的監聽器監聽,並生成相應的Trace和Span信息發送給服務端。發送的方式主要有兩種,一種是HTTP報文的方式,還有一種是消息總線的方式如:RabbitMQ。

最終我們可以總結出來,Sleuth和Zipkin的關係就好比Spring Boot Actuator和Spring Boot Admin之間的關係,一個用於產生數據,一個用於展示數據。

第二章 Sleuth+Zipkin入門案例

2.1、項目準備與啓動

我們接下來的所有操作均是在Config最後完成的工程上進行操作,相關代碼請到配套資料中尋找。

我們需要依次啓動如下服務:(eureka-server7001會報錯,不用管,等eureka-server7002啓動後,過一會就恢復正常了)

  1. eureka-server7001
  2. eureka-server7002

打開瀏覽器輸入指定的地址:http://localhost:7001/login,登錄賬號:root,登錄密碼:123456

2.2、搭Zipkin服務端

(1)到官網下載Zipkin Server,下載地址:https://dl.bintray.com/openzipkin/maven/io/zipkin/java/zipkin-server/

(2)我們下載2.12.9這個最新的版本,點擊進去後,選擇第一個,如果你下載失敗,可以到配套資料中尋找該jar包。

(3)輸入啓動命令啓動該jar包:java -jar zipkin-server-2.12.9-exec.jar

(4)打開瀏覽器輸入Zipkin的web界面地址:http://localhost:9411/zipkin/

(5)要想查看更加詳細的配置和命令請參考:

  • 有關zipkin的啓動命令可以配置的參數可以看這裏:https://github.com/apache/incubator-zipkin/tree/master/zipkin-server
  • 有關zipkin配置mysql基礎建表語句可以看這裏:https://github.com/apache/incubator-zipkin/blob/master/zipkin-storage/mysql-v1/src/main/resources/mysql.sql
  • 有關zipkin本身配置文件可以看這裏:https://github.com/apache/incubator-zipkin/blob/master/zipkin-server/src/main/resources/zipkin-server-shared.yml

2.3、搭Zipkin客戶端

(1)服務提供者service-provider8001service-provider8002、服務消費者service-consumer9002service-consumer9003,全部添加以下依賴:

pom.xml

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

(2)服務提供者service-provider8001service-provider8002、服務消費者service-consumer9002service-consumer9003,全部添加以下配置:

application.yaml

spring:
  zipkin:
    base-url: http://localhost:9411
    sender:
      type: web

(3)服務提供者service-provider8001service-provider8002、服務消費者service-consumer9002service-consumer9003,從左向右依次啓動:

Eureka:

Console:

2.4、鏈路跟蹤的測試

訪問地址:http://localhost:9002/consumer/product/findAll

鏈路跟蹤:http://localhost:9411/zipkin

點擊查找:

點擊鏈路:

查看依賴:

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