SpringCloud 基礎教程(十二)-Zipkin 分佈式鏈路追蹤系統搭建

 個人博客:程序員笑笑生,歡迎瀏覽博客!java

 上一章 SpringCloud 基礎教程(十一)-Sleuth 調用鏈追蹤簡介當中,咱們將介紹了Spring Cloud Sleuth在分佈式環境中實現了調用鏈路信息的打印,本章將在此基礎之上結合Zikpin搭建完整的實時數據追蹤系統。mysql

前言

 Zipkin是一款分佈式追蹤系統,是用來收集並診斷微服務體系中系統延時問題,主要功能就是收集和查找這些問題,Spring Cloud Sleuth實現了Dapper(Google 分佈式跟蹤系統的論文),生成了一系列的追蹤數據,固然也能集成Zipkin,彙集日誌到Zipkin中,由Zipkin收集並存儲,以及提供查詢等功能程序員

1、Zipkin簡介

 Zipkin主要由4個部分組成,以下圖:web

  • 收集器:Collector
  • 存儲器:Storage,默認是內存存儲,咱們能夠改爲數據庫如Mysql等
  • 查詢:提供RESTful的api提供查詢
  • Web界面:單獨的UI組件

file

2、快速使用

 Zipkin分爲服務端和客戶端,服務端就是單獨的一個Zipkin服務,用來收集、展現信息用的,而客戶端在微服務架構中就是每一個微服務的組件,咱們在每一個組件中配置Zipkin服務端的鏈接地址URL,就能夠將追蹤信息傳輸給Zipkin。傳輸採用的事HTTP請求,固然也能夠改爲消息總線的方式.spring

2.1 搭建Zipkin服務端

 新建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/,出現如下的頁面:架構

file

能夠根據服務名稱,Span等其餘條件查詢鏈路追蹤的狀況.app

2.二、收集客戶端信息到Zipkin服務端

 搭建好了Zipkin服務端後,咱們須要在客戶端(開發微服務組件)中配置相關的信息,咱們回顧一下咱們的服務組件:

  • Eureka註冊中心:eureka-server
  • 服務提供者:server-provider實例2個
  • 服務消費者:server-consumer實例1個

 咱們在上一章中爲每一個組件都引入了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
  • spring.zipkin.base-url: zipkin服務端鏈接地址url
  • spring.zipkin.enabled: 容許開啓zipkin
  • spring.sleuth.sampler.probability:表示採樣率,1.0表示日誌全量傳遞到服務端

 接下來,咱們啓動全部的服務以及Zipkin的服務端,並經過服務消費者接口調用服務消費者接口:

http://localhost:5168/hystrix/sayHello?name=test,接口成功的返回了信息,日誌一樣打出了調用鏈的信息:

咱們經過zipkin服務端的web UI查看到了一條請求:

file

注意:當前採用的是HTTP方式傳輸數據

 雙擊以後顯示調用鏈的具體信息,這是一個完整的Trace在Web頁面的顯示,這條調用鏈通過了服務消費者,

Hystrix,爲何通過Hyxtrix呢,咱們知道Hystrix爲每個資源維護了一個線程池,因此有一個單獨的Span

,同時通過了服務提供者,這樣咱們能夠查看到服務調用的關係依賴了:

file

點擊應用名稱,咱們還能夠看到更多的信息,請求耗時等信息:

file

2.3 其餘支持

  • 默認狀況下,Spring Cloud Sleuth 提供對Feign的支持,經過 TraceFeignClientAutoConfigration,能夠經過設置 srping.sleuth.feign.enabled=false 禁用
  • 對於Zuul的調用,一樣支持調用追蹤,能夠經過設置spring.sleuth.zuul.enabled=false,禁用支持

3、整合MYSQL

 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

注意:

  • 當前的springCloud版本: Greenwich.SR3
  • zipkin-autoconfigure-storage-mysql:當項目中引入了該依賴,而且配置了zipkin.storage.type=mysql,就會自動裝配Zipkin相關組件;zipkin2.autoconfigure.storage.mysql.ZipkinMySQLStorageProperties經過 zipkin.storage.mysql前綴能夠配置mysql的屬性,默認的DB是zipkin,數據庫是本地的

file

啓動項目後,會在mysql數據庫中建立三張表:zipkin_annotations、zipkin_spans、zipkin_dependencies保存相關的信息,當咱們發起一次請求後,全部的信息都會記錄在數據庫中:file

經過以上的過程就能夠持久化追蹤信息到數據庫了。

4、總結

 本章在上一章的基礎之上,結合了Spring Cloud Sleuth和Zipkin,實現了分佈式鏈路追蹤解決方案,同時能夠根據需求將信息保存在Mysql中,固然咱們還能夠保存在其餘的存儲系統中,如elasticsearch等,須要咱們本身去定義。

----END----

 以就是本期的分享,你還能夠關注公衆號: 程序員笑笑生,關注更多精彩內容!

file

file

SpringCloud基礎教程(一)-微服務與SpringCloud

SpringCloud基礎教程(二)-服務發現 Eureka

SpringCloud基礎教程(三)-Eureka進階

SpringCloud 基礎教程(四)-配置中心入門

SpringCloud基礎教程(五)-配置中心熱生效和高可用

SpringCloud 基礎教程(六)-負載均衡Ribbon

SpringCloud 基礎教程(七)-Feign聲明式服務調用

SpringCloud 基礎教程(八)-Hystrix熔斷器(上)

SpringCloud 基礎教程(九)-Hystrix服務監控(下)

SpringCloud 基礎教程(十)-Zull服務網關

SpringCloud 基礎教程(十一)- Sleuth 調用鏈追蹤簡介

SpringCloud 基礎教程(十二)-Zipkin 分佈式鏈路追蹤系統搭建

更多精彩內容,請期待...

本文由博客一文多發平臺 OpenWrite 發佈!

個人博客地址蘭陵笑笑生,歡迎瀏覽!

相關文章
相關標籤/搜索