目錄
前言
參考資料:
《Spring Microservices in Action》
《Spring Cloud Alibaba 微服務原理與實戰》
《B站 尚矽谷 SpringCloud 框架開發教程 周陽》
Zipkin 允許開發人員以圖形方式檢視事務佔用的時間量,並分解在呼叫中涉及的每個微服務所用的時間。在微服務架構中,Zipkin 是識別效能問題的寶貴工具;
1. Zipkin 基礎知識
1.1 Zipkin 鏈路監控的原理
- 上圖表示一請求鏈路,一條鏈路通過
Trace Id
唯一標識,Span 標識發起的請求資訊,各 Span 通過Parent id
關聯起來; - Span 表示呼叫鏈路來源,通俗的理解 Span 就是一次請求資訊;
- 簡略理解圖如下:
2. 下載 Zipkin 伺服器
Spring Cloud 從 F 版起不需要自己構建 Zipkin Server 了,只需呼叫 jar 包即可;
2.1 下載 zipkin-server-2.12.9-exec.jar 包
- 訪問官網下載 Zipkin 的 Web UI:https://dl.bintray.com/openzipkin/maven/io/zipkin/java/zipkin-server/
2.2 啟動 Zipkin Server
- 使用命令啟動 Zipkin Server:
java -jar zipkin-server-2.12.9-exec.jar
;
- 預設埠為:9411;
- 訪問 Zipkin Server 的管理後臺:http://localhost:9411;
2.3 *Docker 部署方式
也可以使用 Docker 部署省去下載的麻煩;
docker run -d -p 9411:9411 openzipkin/zipkin
;
3. 手動安裝和配置 Zipkin 伺服器
雖然 Spring Cloud 從 F 版起不需要自己構建 Zipkin Server,但這裡還是提供手動構建的方法;
3.1 引入 pom.xml 依賴檔案
<!-- 用於建立 Zipkin 伺服器所需的核心類 -->
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-server</artifactId>
</dependency>
<!-- 用於執行 Zipkin 伺服器的 UI 部分所需的核心類 -->
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-autoconfigure-ui</artifactId>
</dependency>
3.2 在主程式類上新增註解
- @EnableZipkinServer:建立相對簡單。缺點是 Zipkin 伺服器不可用時資料會丟失;
- 注意:該註解不是 Spring Cloud 提供的,是 Zipkin 提供的;
- @EnableZipkinStreamServer:需要建立和配置正在跟蹤的服務以釋出訊息到 RabbitMQ 或 Kafka。優點是即使 Zipkin 伺服器不可用,也可以繼續收集跟蹤資料,直到 Zipkin 伺服器可用於處理訊息記錄;
- 該註解是 Spring Cloud 提供的;
3.3 配置跟蹤資料儲存方式
- Zipkin 支援四種不同的後端資料儲存,如下:
- 記憶體資料;
- MySQL;
- Cassandra;
- Elasticsearch;
- 預設情況下 Zipkin 使用記憶體資料來儲存跟蹤資料,可以進行配置到其他儲存方式;
4. 使用 Zipkin 進行分散式跟蹤
4.1 新增 pom.xml 依賴檔案
需要給 Zuul 閘道器服務、消費者服務、提供者服務等所有服務新增依賴;
<!-- 包含在服務中啟用 sleuth 的基本庫 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
<!-- 【可選】當開發人員需要以程式設計方式與 sleuth 互動時新增 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-sleuth-core</artifactId>
</dependency>
<!-- 與 Zipkin 整合 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-sleuth-zipkin</artifactId>
</dependency>
4.2 修改 application.yml 配置檔案
在每個想與 Zipkin 進行通訊的服務的 application.yml 配置檔案中進行修改;
spring:
zipkin:
baseUrl: http://localhost:9411 #Zipkin 伺服器的地址
sleuth:
sampler:
percentage: 1 #設定跟蹤級別,也即定義每個服務應該向 Zipkin 寫入資料的頻率,預設 10%
spring.sleuth.sampler.percentage = 0
表示不傳送任何事物資料;- 上述
spring.sleuth.sampler.percentage = 1
屬性也可用下面的程式碼替代。表示為所有服務傳送跟蹤資訊;
@Bean
public Sampler defaultSampler() {
return new AlwaysSampler();
}
4.3 訪問 9411 埠檢視視覺化日誌
- 先呼叫服務 API;
- 再進入:http://localhost:9411;
- 即可檢視 Zipkin 的日誌捕獲跟蹤結果;
- Zipkin 介面可以查詢一些基本的資訊:
- 點選事務後可以檢視更詳細的資訊:
- 點選組織服務跨度,可以檢視呼叫中的額外細節:
- 點選依賴,可以檢視依賴關係: