個人博客:程序員笑笑生,歡迎瀏覽博客!java
上一章 SpringCloud 基礎教程(十一)-Sleuth 調用鏈追蹤簡介當中,咱們將介紹了Spring Cloud Sleuth在分佈式環境中實現了調用鏈路信息的打印,本章將在此基礎之上結合Zikpin搭建完整的實時數據追蹤系統。mysql
Zipkin是一款分佈式追蹤系統,是用來收集並診斷微服務體系中系統延時問題,主要功能就是收集和查找這些問題,Spring Cloud Sleuth實現了Dapper(Google 分佈式跟蹤系統的論文),生成了一系列的追蹤數據,固然也能集成Zipkin,彙集日誌到Zipkin中,由Zipkin收集並存儲,以及提供查詢等功能程序員
Zipkin主要由4個部分組成,以下圖:web
Zipkin分爲服務端和客戶端,服務端就是單獨的一個Zipkin服務,用來收集、展現信息用的,而客戶端在微服務架構中就是每一個微服務的組件,咱們在每一個組件中配置Zipkin服務端的鏈接地址URL,就能夠將追蹤信息傳輸給Zipkin。傳輸採用的事HTTP請求,固然也能夠改爲消息總線的方式.spring
新建Maven項目,在pom中引入zipkin的依賴,zipkin-server爲服務端依賴,zipkin-autoconfigure-ui爲web依賴:sql
<dependency> <groupId>io.zipkin.java</groupId> <artifactId>zipkin-server</artifactId> <version>2.11.9</version> </dependency> <dependency> <groupId>io.zipkin.java</groupId> <artifactId>zipkin-autoconfigure-ui</artifactId> <version>2.11.9</version> </dependency>
建立啓動類:SleuthServeApplication,添加@EnableZipkinServer註解,表示容許啓動Zipkin服務:數據庫
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import zipkin2.server.internal.EnableZipkinServer; @SpringBootApplication @EnableZipkinServer public class SleuthServeApplication { public static void main(String[] args) { SpringApplication.run(SleuthServeApplication.class, args); } }
配置applicaiton.yml,注意若是沒有添加 management.metrics.web.server.auto-time-requests=false ,則請求web UI時出現錯誤,這個是表示關閉自動監測;api
server: port: 8242 management: metrics: web: server: auto-time-requests: false
啓動項目後,請求http://localhost:8242/,出現如下的頁面:架構
能夠根據服務名稱,Span等其餘條件查詢鏈路追蹤的狀況.app
搭建好了Zipkin服務端後,咱們須要在客戶端(開發微服務組件)中配置相關的信息,咱們回顧一下咱們的服務組件:
咱們在上一章中爲每一個組件都引入了sleuth依賴:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-sleuth</artifactId> </dependency>
如今一樣爲每個服務添加spring Cloud sleuth對Zipkin支持的依賴
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-sleuth-zipkin</artifactId> </dependency>
接着在服務提供者:server-provider和服務消費者:server-consumer的application.yml中配置:
spring: zipkin: base-url: http://localhost:8242/ enabled: true sleuth: sampler: probability: 1.0
接下來,咱們啓動全部的服務以及Zipkin的服務端,並經過服務消費者接口調用服務消費者接口:
http://localhost:5168/hystrix/sayHello?name=test,接口成功的返回了信息,日誌一樣打出了調用鏈的信息:
咱們經過zipkin服務端的web UI查看到了一條請求:
注意:當前採用的是HTTP方式傳輸數據
雙擊以後顯示調用鏈的具體信息,這是一個完整的Trace在Web頁面的顯示,這條調用鏈通過了服務消費者,
Hystrix,爲何通過Hyxtrix呢,咱們知道Hystrix爲每個資源維護了一個線程池,因此有一個單獨的Span
,同時通過了服務提供者,這樣咱們能夠查看到服務調用的關係依賴了:
點擊應用名稱,咱們還能夠看到更多的信息,請求耗時等信息:
Zipkin對數據的存儲默認是在內存中的,在企業生產環境中,咱們須要持久化這些數據,一樣咱們能夠將其與Mysql進行整合:
在Zipkin服務端的pom文件中,咱們再添加如下依賴:
<!--自動注入配置--> <dependency> <groupId>io.zipkin.java</groupId> <artifactId>zipkin-autoconfigure-storage-mysql</artifactId> <version>2.11.9</version> </dependency> <!--mysql驅動--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> </dependency> <!--spring boot 數據源--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency>
application.yml配置中:
server: port: 8242 management: metrics: web: server: auto-time-requests: false spring: datasource: username: root url: jdbc:mysql://localhost:3306/zipkin password: 123456 driver-class-name: com.mysql.jdbc.Driver schema: classpath:/mysql.sql //項目啓動時候 初始化數據庫 initialization-mode: always zipkin: storage: type : mysql mysql: host : localhost port : 3306 username : root password : 123456 //數據庫名稱 db : zipkin
注意:
啓動項目後,會在mysql數據庫中建立三張表:zipkin_annotations、zipkin_spans、zipkin_dependencies保存相關的信息,當咱們發起一次請求後,全部的信息都會記錄在數據庫中:
經過以上的過程就能夠持久化追蹤信息到數據庫了。
本章在上一章的基礎之上,結合了Spring Cloud Sleuth和Zipkin,實現了分佈式鏈路追蹤解決方案,同時能夠根據需求將信息保存在Mysql中,固然咱們還能夠保存在其餘的存儲系統中,如elasticsearch等,須要咱們本身去定義。
----END----
以就是本期的分享,你還能夠關注公衆號: 程序員笑笑生,關注更多精彩內容!
SpringCloud基礎教程(一)-微服務與SpringCloud
SpringCloud基礎教程(二)-服務發現 Eureka
SpringCloud基礎教程(五)-配置中心熱生效和高可用
SpringCloud 基礎教程(六)-負載均衡Ribbon
SpringCloud 基礎教程(七)-Feign聲明式服務調用
SpringCloud 基礎教程(八)-Hystrix熔斷器(上)
SpringCloud 基礎教程(九)-Hystrix服務監控(下)
SpringCloud 基礎教程(十一)- Sleuth 調用鏈追蹤簡介
SpringCloud 基礎教程(十二)-Zipkin 分佈式鏈路追蹤系統搭建
更多精彩內容,請期待...
本文由博客一文多發平臺 OpenWrite 發佈!
個人博客地址蘭陵笑笑生,歡迎瀏覽!