微服務架構 | 10.3 使用 Zipkin 視覺化日誌追蹤

多氯環己烷發表於2022-02-07


前言

參考資料
《Spring Microservices in Action》
《Spring Cloud Alibaba 微服務原理與實戰》
《B站 尚矽谷 SpringCloud 框架開發教程 周陽》

Zipkin 允許開發人員以圖形方式檢視事務佔用的時間量,並分解在呼叫中涉及的每個微服務所用的時間。在微服務架構中,Zipkin 是識別效能問題的寶貴工具;


1. Zipkin 基礎知識

1.1 Zipkin 鏈路監控的原理

Zipkin 鏈路監控的原理

  • 上圖表示一請求鏈路,一條鏈路通過 Trace Id 唯一標識,Span 標識發起的請求資訊,各 Span 通過 Parent id 關聯起來;
  • Span 表示呼叫鏈路來源,通俗的理解 Span 就是一次請求資訊;
  • 簡略理解圖如下:

Zipkin 鏈路監控的原理1
Zipkin 鏈路監控的原理2


2. 下載 Zipkin 伺服器

Spring Cloud 從 F 版起不需要自己構建 Zipkin Server 了,只需呼叫 jar 包即可;

2.1 下載 zipkin-server-2.12.9-exec.jar 包

2.2 啟動 Zipkin Server

  • 使用命令啟動 Zipkin Server:java -jar zipkin-server-2.12.9-exec.jar

Zipkin 執行介面

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 介面可以查詢一些基本的資訊:

Zipkin 介面查詢基本資訊
Zipkin 介面查詢基本資訊

  • 點選事務後可以檢視更詳細的資訊:

點選事務檢視更詳細資訊
在這裡插入圖片描述

  • 點選組織服務跨度,可以檢視呼叫中的額外細節:

點選組織服務跨度檢視呼叫中的額外細節

  • 點選依賴,可以檢視依賴關係:

點選依賴檢視依賴關係



最後

新人制作,如有錯誤,歡迎指出,感激不盡!
歡迎關注公眾號,會分享一些更日常的東西!
如需轉載,請標註出處!
微服務架構 | 10.3 使用 Zipkin 視覺化日誌追蹤

相關文章