使用Spring Cloud Sleuth和Zipkin進行分佈式跟蹤(學習筆記)

源碼:使用Spring Cloud Sleuth和Zipkin進行分佈式跟蹤
這一章主要講的是,之前自己寫的關聯ID的注入與傳播,用Sleuth來搞定,然後再加上統一日誌管理。

一、Spring Cloud Sleuth與關聯ID

1.Pom依賴

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>

只需要增加個依賴,跟蹤狀態就有了,是真滴方便。

2.使用Zuul將關聯ID添加到HTTP響應。

Sleuth官方認爲在http返回中返回跟蹤ID是不安全的,所以沒有返回,但是我們是需要的,所以要在Zuul的後置過濾器裏配製一下。
在這裏插入圖片描述

二、使用Open Zipkin進行分佈式跟蹤

1.許可證,組織,路由服務添加pom依賴

 <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-sleuth</artifactId>
      </dependency>

      <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-sleuth-zipkin</artifactId>
      </dependency>

2.配置服務以指向Zipkin

在這裏插入圖片描述

3.安裝和配置Zipkin服務器

  <dependency>
        <groupId>io.zipkin.java</groupId>
        <artifactId>zipkin-autoconfigure-ui</artifactId>
    </dependency>
      <dependency>
          <groupId>io.zipkin.java</groupId>
          <artifactId>zipkin-server</artifactId>
      </dependency>

在這裏插入圖片描述
Zipkin支持4種不同的後端數據存儲,分別是:

  1. 內存數據
  2. MySQL
  3. Cassandra
  4. Elasticsearch
    默認是內存。

4.設置跟蹤級別

默認情況下,zipkin只會將所有事務的10%寫進Zipkin服務器。
可以設爲這個值爲1.

spring:
	sleuth:
	    sampler:
	      percentage: 1

也可以替換一個Bean,見名知意,總是發送。
在這裏插入圖片描述

5.使用Zipkin跟蹤事務

配置文件裏,url要加http,不然會報錯:
在這裏插入圖片描述
還是像之前那樣將配置服務改成native本地模式,然後依次開啓Eureka->配置服務-》日誌服務->組織和許可證-》路由。
在運行組織符合和許可證服務的時候,發現老是往localhost上連,調了三個小時才發現,媽耶,一個空格引發的血案:
在這裏插入圖片描述
這倆是一級的,源碼有個錯誤:
在這裏插入圖片描述
許可證服務配置的也不對:
在這裏插入圖片描述
這樣纔對:
在這裏插入圖片描述
然後用postman請求兩次:
在這裏插入圖片描述
接下來就可以跳到localhost:/9411見證奇蹟的時刻了~
在這裏插入圖片描述
然後點開一個詳細查看:
在這裏插入圖片描述
還可以繼續點下去,更詳細:
在這裏插入圖片描述
在這裏插入圖片描述

6.捕獲消息傳遞跟蹤

我們知道,之前的設計是,當組織產生更新或者刪除時,發送消息到消息隊列,然後通知許可證服務刷新redis。然後我們可以用它返回的id來跟蹤消息傳遞。
在這裏插入圖片描述
在Zipkin右上角輸入它,回車即可:
在這裏插入圖片描述
在這裏插入圖片描述
但是很可惜,關聯ID不會傳遞到消息隊列裏去,所以我們手動查一下許可證服務:
在這裏插入圖片描述
在這裏插入圖片描述

7.添加自定義跨度

Zipkin可以監控在SPring環境中的調用,但是redis呀,sql呀, 它監控不到,所以要添加自定義跨度,其實我們之前的記錄已經顯示redis的時間了,爲什麼呢?因爲已經配置了,代碼是這樣的:
在這裏插入圖片描述
記得一定要關閉跟蹤,否則會報錯:打開卻未關閉。
同樣,組織服務的Postgres數據庫操作,也需要定義個跨度:
在這裏插入圖片描述

三、日誌聚合與Spring Cloud Sleuth

現在用雲聚合日誌服務來保存日誌,原理是,docker裏運行的標準輸出都輸出到了Docker.sock,然後用Logspout Docker容器監聽Docker.sock,將得到的內容寫入遠程syslog位置。

1.創建Papertrail賬戶並配置syslog連接器

可能需要科學上網:Papertrail。我看了一下,阿里雲也有類似的東西,改日用阿里試試。
在這裏插入圖片描述
因爲是免費賬戶,所以創建很簡單:
在這裏插入圖片描述
然後添加一個日誌記錄連接就可以了:
在這裏插入圖片描述
在這裏插入圖片描述

2.將docker輸出重定向到Papertrail

把docker-compose.yml更改一下:那裏改成自己的地址。
在這裏插入圖片描述
然後運行docker環境,怎麼運行可以參考我之前寫的博客:包含docker運行配置
要素就是先打包再用docker build。然後如果映射路徑啊什麼的都配置好了的話,run.sh裏的這些也可以都刪除
在這裏插入圖片描述
精簡一下docker-compose.yml文件,如下:

version: "3"
services:
  eurekaserver:
   image:   johncarnell/tmx-eurekasvr:chapter9
   ports:
       - "8761:8761"
  configserver:
    image: johncarnell/tmx-confsvr:chapter9
    ports:
       - "8888:8888"
  zipkin:
    image: johncarnell/tmx-zipkinsvr:chapter9
    ports:
      - "9411:9411"
  zuulserver:
    image: johncarnell/tmx-zuulsvr:chapter9
    ports:
      - "5555:5555"
  licensingservice:
    image: johncarnell/tmx-licensing-service:chapter9
    ports:
      - "8080:8080"
  organizationservice:
    image: johncarnell/tmx-organization-service:chapter9
    ports:
      - "8081:8081"
  logspout:
    image: gliderlabs/logspout
    command: syslog://logs2.papertrailapp.com:51993
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

然後:

#初始化
docker swarm init
#運行 將服務命名爲 mysite
docker stack deploy -c docker-compose.yml mysite
#查看運行狀況
docker service ls

等整個服務起來,就可以在雲後臺看到日誌了:
在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章