文章目錄
- 一、Zipkin概述
- 二、Docker安裝Zipkin
- 三、SpringCloud整合Zipkin
- 四、Zipkin資料持久化
一、Zipkin概述
sleuth分布式請求鍊路跟蹤,可以得知微服務之間的調用鍊路,由于監控資訊隻能輸出到控制台不友善檢視,是以我們需要一個圖形化的工具zipkin。zipkin是twitter開源的分布式跟蹤系統,主要用來收集系統的實時資料,進而追蹤系統的調用問題。
官網:https://zipkin.io/
完整的調用鍊路(sleuth結合zipkin 底層監控):

上圖解釋:
- 一條鍊路通過Trace Id 唯一辨別,Span辨別發起的請求資訊,各span通過parent id關聯起來。
- 整個鍊路的依賴關系如下:
二、Docker安裝Zipkin
-
拉取最新鏡像
docker pull openzipkin/zipkin
-
運作鏡像
①普通運作
②docker-compose 運作,建立docker-compose.yml,加入以下内容docker run -d -p 9411:9411 --name zipkin openzipkin/zipkin
version: '2'
services:
# The zipkin process services the UI, and also exposes a POST endpoint that
# instrumentation can send trace data to. Scribe is disabled by default.
zipkin:
image: openzipkin/zipkin
container_name: zipkin
environment:
- STORAGE_TYPE=mysql
# Point the zipkin at the storage backend
- MYSQL_DB=zipkin
- MYSQL_USER=root
- MYSQL_PASS=123456
- MYSQL_HOST=192.168.1.8
- MYSQL_TCP_PORT=3306
# Uncomment to enable scribe
# - SCRIBE_ENABLED=true
# Uncomment to enable self-tracing
# - SELF_TRACING_ENABLED=true
# Uncomment to enable debug logging
# - JAVA_OPTS=-Dlogging.level.zipkin=DEBUG -Dlogging.level.zipkin2=DEBUG
ports:
# Port used for the Zipkin UI and HTTP Api
- 9411:9411
# Uncomment if you set SCRIBE_ENABLED=true
# - 9410:9410
#networks:
# - default
# - my_net #建立網路 docker network create my_net 删除網絡 docker network rm my_net
#networks:
#my_net:
#external: true
守護程序啟動: cd 到docker-compose.yml目錄下,
docker-compose up -d
停止:
docker-compose stop
mysql腳本下載下傳位址
https://github.com/openzipkin/zipkin/blob/master/zipkin-storage/mysql/src/main/resources/mysql.sql
三、SpringCloud整合Zipkin
支付服務和訂單服務引入以下pom依賴和yml配置。
- 引入pom依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
<version>2.2.8.RELEASE</version>
</dependency>
由于spring-cloud-starter-zipkin同時包含了sleuth,是以可以省略spring-cloud-starter-sleuth的引用。
- 添加zipkin相關配置
#服務追蹤
zipkin:
base-url: http://ip:9411/ # zipkin伺服器的位址
discovery-client-enabled: false #關閉服務發現,否則spring cloud會把zipkin的url當作服務名稱
sender:
type: web #設苦使用http的方式傳輸資料
sleuth:
traceId128: true
sampler:
probability: 1.0 #抽樣采集率為100%,預設為0.1 ,即10%
propagation-keys: user_name
- 業務類Controller添加方法
- 支付服務8001業務類Controller添加以下方法:
@GetMapping("/payment/zipkin")
public String paymentZipkin() {
return "hi ,i'am paymentzipkin server fall back,welcome to here, O(∩_∩)O哈哈~";
}
- 訂單服務80的Controller中添加以下方法:
@GetMapping("zipkin")
public String paymentZipkin() {
String result = restTemplate.getForObject(PAYMENT_URL + "/payment/zipkin", String.class);
return result;
}
-
測試
依次啟動注冊中心eureka7001,支付服務8001,訂單服務80。
使用postman發送多次請求:http://localhost:89/consumer/payment/zipkin;
通路http://your_host:9411/zipkin/
注意:若使用雲伺服器記得關閉防火牆和設定安全組。
服務調用鍊路追蹤資訊統計:
四、Zipkin資料持久化
Zipkin存儲原則:預設将監控資料存儲在記憶體中,如果Zipkin挂了或者重新開機,監控資料就會消失。是以要适應生産的需要,就要實作監控資料的持久化。而想要實作實作持久化,自然就是要将資料存儲到資料庫。
Zipkin支援将資料存儲到:
- 記憶體(預設,不适用于生産)
- MySQL(當資料量大時,查詢較慢,不建議使用)
- ElasticSearch(建議使用)
- Cassandra(Twitter官方使用,國内使用的公司較少,相關文檔較少)
Zipkin資料持久化官網文檔:https://github.com/openzipkin/zipkin#storage-component
ElasticSearch作為Zipkin存儲資料庫的官方文檔如下:
- elsticsearch-storage: https://github.com/openzipkin/zipkin/tree/master/zipkin-server#elasticsearch-storage
- zipkin-storage/elasticsearch:https://github.com/openzipkin/zipkin/tree/master/zipkin-storage/elasticsearch
通過docker安裝:
docker run --env STORAGE_TYPE=elasticsearch --env ES_HOSTS=192.168.56.10:9200
openzipkin/zipkin-dependencies
ElasticSearch環境變量:
Zipkin支援的ElasticSearch環境變量: