前言
參考資料:
《Spring Microservices in Action》
《Spring Cloud Alibaba 微服務原理與實戰(zhàn)》
《B站 尚硅谷 SpringCloud 框架開發(fā)教程 周陽》
Zipkin 允許開發(fā)人員以圖形方式查看事務占用的時間量错妖,并分解在調(diào)用中涉及的每個微服務所用的時間绿鸣。在微服務架構(gòu)中疚沐,Zipkin 是識別性能問題的寶貴工具;
1. Zipkin 基礎(chǔ)知識
1.1 Zipkin 鏈路監(jiān)控的原理
Zipkin 鏈路監(jiān)控的原理.png
- 上圖表示一請求鏈路潮模,一條鏈路通過
Trace Id
唯一標識亮蛔,Span 標識發(fā)起的請求信息,各 Span 通過Parent id
關(guān)聯(lián)起來擎厢; - Span 表示調(diào)用鏈路來源究流,通俗的理解 Span 就是一次請求信息;
- 簡略理解圖如下:
Zipkin 鏈路監(jiān)控的原理1.png
Zipkin 鏈路監(jiān)控的原理2.png
2. 下載 Zipkin 服務器
Spring Cloud 從 F 版起不需要自己構(gòu)建 Zipkin Server 了动遭,只需調(diào)用 jar 包即可芬探;
2.1 下載 zipkin-server-2.12.9-exec.jar 包
- 訪問官網(wǎng)下載 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
;
Zipkin 運行界面
- 默認端口為:9411厘惦;
- 訪問 Zipkin Server 的管理后臺:http://localhost:9411偷仿;
2.3 *Docker 部署方式
也可以使用 Docker 部署省去下載的麻煩;
-
docker run -d -p 9411:9411 openzipkin/zipkin
;
3. 手動安裝和配置 Zipkin 服務器
雖然 Spring Cloud 從 F 版起不需要自己構(gòu)建 Zipkin Server酝静,但這里還是提供手動構(gòu)建的方法节榜;
3.1 引入 pom.xml 依賴文件
<!-- 用于創(chuàng)建 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:創(chuàng)建相對簡單。缺點是 Zipkin 服務器不可用時數(shù)據(jù)會丟失别智;
- 注意:該注解不是 Spring Cloud 提供的宗苍,是 Zipkin 提供的;
-
@EnableZipkinStreamServer:需要創(chuàng)建和配置正在跟蹤的服務以發(fā)布消息到 RabbitMQ 或 Kafka薄榛。優(yōu)點是即使 Zipkin 服務器不可用讳窟,也可以繼續(xù)收集跟蹤數(shù)據(jù),直到 Zipkin 服務器可用于處理消息記錄敞恋;
- 該注解是 Spring Cloud 提供的挪钓;
3.3 配置跟蹤數(shù)據(jù)存儲方式
- Zipkin 支持四種不同的后端數(shù)據(jù)存儲,如下:
- 內(nèi)存數(shù)據(jù)耳舅;
- MySQL碌上;
- Cassandra;
- Elasticsearch浦徊;
- 默認情況下 Zipkin 使用內(nèi)存數(shù)據(jù)來存儲跟蹤數(shù)據(jù)馏予,可以進行配置到其他存儲方式;
4. 使用 Zipkin 進行分布式跟蹤
4.1 添加 pom.xml 依賴文件
需要給 Zuul 網(wǎng)關(guān)服務盔性、消費者服務霞丧、提供者服務等所有服務添加依賴;
<!-- 包含在服務中啟用 sleuth 的基本庫 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
<!-- 【可選】當開發(fā)人員需要以編程方式與 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 #設(shè)置跟蹤級別蛹尝,也即定義每個服務應該向 Zipkin 寫入數(shù)據(jù)的頻率,默認 10%
-
spring.sleuth.sampler.percentage = 0
表示不發(fā)送任何事物數(shù)據(jù)悉尾; - 上述
spring.sleuth.sampler.percentage = 1
屬性也可用下面的代碼替代突那。表示為所有服務發(fā)送跟蹤信息;
@Bean
public Sampler defaultSampler() {
return new AlwaysSampler();
}
4.3 訪問 9411 端口查看可視化日志
- 先調(diào)用服務 API构眯;
- 再進入:http://localhost:9411愕难;
- 即可查看 Zipkin 的日志捕獲跟蹤結(jié)果;
- Zipkin 界面可以查詢一些基本的信息:
Zipkin 界面查詢基本信息
- 點擊事務后可以查看更詳細的信息:
點擊事務查看更詳細信息.png
image.png
- 點擊組織服務跨度惫霸,可以查看調(diào)用中的額外細節(jié):
點擊組織服務跨度查看調(diào)用中的額外細節(jié).png
- 點擊依賴猫缭,可以查看依賴關(guān)系:
點擊依賴查看依賴關(guān)系.png