Spring Cloud鏈路跟蹤:Sleuth+Zipkin

目錄

1 Zipkin Server

2 服務提供者

2.1 pom.xml

2.2 application.properties

3 服務消費者

3.1 pom.xml

3.2 application.properties

4 運行及結果


在微服務的架構中,一次請求可能會涉及到十幾次乃至幾十次微服務之間的內部調用,這些服務相互之間通過HTTP進行交互,一旦出現bug或者性能瓶頸的時候,查找問題起來會花費很大的工作量。所以分佈式鏈路跟蹤就是解決這樣的問題的。

Spring Cloud Sleuth爲Spring Cloud實現了分佈式鏈路跟蹤解決方案。通過它我們可以清楚地知道一次調用經過了多少個微服務以及相應的耗時是多少。Zipkin是一個開源的分佈式跟蹤系統,它可以收集服務的定時數據,解決延遲問題。Zipkin提供一個Web前端可以輕鬆地收集和分析數據,例如用戶每次請求服務的處理時間等,來方便的監測系統中存在的瓶頸。

筆者使用的Java版本是jdk-8u201,IDE使用的是IntelliJ IDEA 2019.3 x64,Spring Boot的版本是2.1.7.RELEASE,Spring Cloud的版本是Greenwich.SR2。同時本文所使用的項目代碼沿用筆者之前寫過的文章《Spring Cloud服務治理:Eureka+OpenFeign》中的項目代碼,並在此基礎上進行繼續開發。


1 Zipkin Server

Zipkin可以選擇自己搭建項目,但從Spring Cloud Finchley版本開始,這種方式就已經不被推薦了,而是需要我們單獨的安裝Zipkin軟件來實現數據的收集。可選的下載地址:https://dl.bintray.com/openzipkin/maven/io/zipkin/java/zipkin-server/,筆者下載的是zipkin-server-2.12.9-exec.jar這個版本。下載成功後就可以通過下面這條命令來運行了:

java -jar zipkin-server-2.12.9-exec.jar

2 服務提供者

服務提供者延續筆者之前寫過的代碼hello-service。

2.1 pom.xml

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.2 application.properties

配置文件繼續沿用之前的代碼,並且加上以下的配置:

spring.sleuth.web.client.enabled=true
spring.sleuth.sampler.probability=1.0
spring.zipkin.base-url=http://localhost:9411
spring.zipkin.discovery-client-enabled=false
spring.zipkin.enabled=true
spring.zipkin.sender.type=web
  • spring.sleuth.web.client.enabled:表示開啓鏈路追蹤;
  • spring.sleuth.sampler.probability:表示追蹤信息導出到Zipkin的比例,這裏默認是0.1,即10%的追蹤信息導出到Zipkin,我們這裏將其配置爲1.0;
  • spring.zipkin.base-url:表示指定Zipkin Server的地址;
  • spring.zipkin.discovery-client-enabled:false表示將Zipkin當成一個URL,而不是服務名稱;
  • spring.zipkin.enabled:表示開啓Zipkin;
  • spring.zipkin.sender.type:表示設置追蹤信息的發送類型(可以選擇RabbitMQ或Kafka,這裏選擇的是HTTP的方式)。

3 服務消費者

服務消費者延續筆者之前寫過的代碼feign-consumer。並且需要添加的內容和上面服務提供者需要添加的代碼是一樣的。

3.1 pom.xml

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>

3.2 application.properties

配置文件繼續沿用之前的代碼,並且加上以下的配置:

spring.sleuth.web.client.enabled=true
spring.sleuth.sampler.probability=1.0
spring.zipkin.base-url=http://localhost:9411
spring.zipkin.discovery-client-enabled=false
spring.zipkin.enabled=true
spring.zipkin.sender.type=web

4 運行及結果

依次啓動eureka-server、hello-service和feign-consumer,啓動成功後訪問URL:http://localhost:9001/feign-consumer來進行一次請求訪問。然後訪問Zipkin的web端界面地址:http://localhost:9411/來查看結果,如下所示:

點開第一條調用記錄,可以看到具體微服務所花費的時間:

再點擊其中的/hello接口,還可以看到具體的接口以及調用相關信息,以及Sleuth的trace、span和父id:

發佈了65 篇原創文章 · 獲贊 86 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章