1. 程式人生 > >spring cloud 2.0 入門系列一 (10)分散式鏈路追蹤-Zipkin

spring cloud 2.0 入門系列一 (10)分散式鏈路追蹤-Zipkin

服務說明

Zipkin是什麼

Zipkin分散式跟蹤系統;它可以幫助收集時間資料,解決在microservice架構下的延遲問題;它管理這些資料的收集和查詢;Zipkin的設計是基於谷歌的Google Dapper論文。
每個應用程式向Zipkin報告定時資料,Zipkin UI呈現了一個依賴圖表來展示多少跟蹤請求經過了每個應用程式;如果想解決延遲問題,可以過濾或者排序所有的跟蹤請求,並且可以檢視每個跟蹤請求佔總跟蹤時間的百分比。

為什麼使用Zipkin

隨著業務越來越複雜,系統也隨之進行各種拆分,特別是隨著微服務架構和容器技術的興起,看似簡單的一個應用,後臺可能有幾十個甚至幾百個服務在支撐;一個前端的請求可能需要多次的服務呼叫最後才能完成;當請求變慢或者不可用時,我們無法得知是哪個後臺服務引起的,這時就需要解決如何快速定位服務故障點,Zipkin分散式跟蹤系統就能很好的解決這樣的問題。

服務搭建

服務端

從SpringCloud2.0 以後,官方已經不支援自定義服務,官方只提供編譯好的jar包供使用者使用。
這裡我們採用docker方式部署zipkin服務,並採用elasticsearch作為zipkin的資料儲存器。

下載映象

docker pull openzipkin/zipkin
docker pull docker.elastic.co/elasticsearch/elasticsearch:6.3.0

編寫啟動檔案

新建資料夾,目錄如下

dockerfile
    |- elasticsearch
    |    |- data
    |- docker-compose.yml

編寫啟動檔案docker-compose.yml

version: "3"
services:

  elasticsearch:
    image:  elasticsearch:latest
    container_name: elasticsearch
    restart: always
    networks:
      - elk
    ports:
      - "9200:9200"
      - "9300:9300"
    volumes:
       - ../elasticsearch/data:/usr/share/elasticsearch/data

  zipkin:
    image: zipkin:latest
    container_name: zipkin
    restart: always
    networks:
      - elk
    ports:
      - "9411:9411"
    environment:
      - STORAGE_TYPE=elasticsearch
      - ES_HOSTS=elasticsearch

networks:
    elk:

關於docker-compose.yml 檔案格式及相關內容請自行百度瞭解。

啟動服務

命令模式進入dockerfile目錄,執行啟動命令

docker-compose up -d

客戶端搭建

修改pom檔案

增加zipkin依賴

<!-- 分散式鏈路追蹤 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>

修改配置檔案

增加zipkin相關配置

spring:
  zipkin:
    base-url: http://localhost:9411/
  sleuth:
    sampler:
      probability: 1 #樣本採集量,預設為0.1,為了測試這裡修改為1,正式環境一般使用預設值。

為了驗證效果,必須有兩個客戶端,一個提供介面,一個呼叫介面,這裡就不寫第二個客戶端搭建了,如果有不懂的可以參考之前的博文。

程式碼樣例

客戶端: