1. 程式人生 > >SpringCloud學習之sleuth&zipkin【二】

SpringCloud學習之sleuth&zipkin【二】

bus dep char str gradle 問題 -m onclick runt

  這篇文章我們針對上篇鏈路跟蹤的遺留問題進行改造升級

一、將追蹤數據存放到MySQL數據庫中

  默認情況下zipkin將收集到的數據存放在內存中(In-Memeroy),但是不可避免帶來了幾個問題:

    • 在服務重新啟動後,歷史數據丟失。
    • 在數據量過大的時候容易造成OOM錯誤

  通常做法是與mysql或者ElasticSearch結合使用,那麽我們先把收集到的數據先存到Mysql數據庫中

  1、改造zipkin-server的依賴

    gradle配置:

技術分享圖片
dependencies {
    compile(‘org.springframework.cloud:spring-cloud-starter-eureka‘)
    compile(
‘org.springframework.cloud:spring-cloud-starter-config‘) // compile(‘io.zipkin.java:zipkin-server‘) compile ‘org.springframework.cloud:spring-cloud-starter-sleuth‘ compile(‘io.zipkin.java:zipkin-autoconfigure-ui‘) runtime(‘mysql:mysql-connector-java‘) compile(‘org.springframework.boot:spring-boot-starter-jdbc‘) compile(
‘org.springframework.cloud:spring-cloud-sleuth-zipkin-stream‘) compile(‘org.springframework.cloud:spring-cloud-stream‘) compile(‘org.springframework.cloud:spring-cloud-stream-binder-kafka‘) }
View Code

    這裏將原先的 io.zipkin.java:zipkin-server 替換為 spring-cloud-sleuth-zipkin-stream 該依賴項包含了對mysql存儲的支持,同時添加spring-boot-starter-jdbc與mysql的依賴,順便把kafka的支持也加進來

    技術分享圖片

    註意:此處腳本最好在數據庫中執行一下,當然我們也可以在下面的配置文件中做初始化的相關配置

  2、YAML中的關鍵配置項:

技術分享圖片
spring:
  datasource:
    username: root
    password: root
    url: jdbc:mysql://localhost:3306/myschool?characterEncoding=utf-8&useSSL=false
    initialize: true
    continue-on-error: true
  kafka:
    bootstrap-servers: localhost:9092
server:
  port: 9000
zipkin:
  storage:
    type: mysql
View Code

  註意zipkin.storage.type 指定為mysql

  3、更改啟動類

技術分享圖片
package com.hzgj.lyrk.zipkin.server;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.sleuth.zipkin.stream.EnableZipkinStreamServer;

@EnableZipkinStreamServer
@SpringBootApplication
public class ZipkinServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(ZipkinServerApplication.class, args);
    }
}
View Code

  這裏註意將@EnableZipkinServer改成@EnableZipkinStreamServer

二、將Trace改成異步消息

  這步改造主要用以提高性能與穩定性,服務將收集到的span無腦的往消息中間件上丟就可以了,不用管zipkin的地址在哪裏。

  1、改造Order-Server依賴:

    gradle:

技術分享圖片
    compile(‘org.springframework.cloud:spring-cloud-starter-eureka-server‘)
   // compile(‘org.springframework.cloud:spring-cloud-sleuth-zipkin‘)
    compile ‘org.springframework.cloud:spring-cloud-starter-sleuth‘
    compile ‘org.springframework.cloud:spring-cloud-sleuth-stream‘
    compile(‘org.springframework.cloud:spring-cloud-starter-config‘)
    compile(‘org.springframework.cloud:spring-cloud-stream‘)
    compile(‘org.springframework.cloud:spring-cloud-stream-binder-kafka‘)
    compile(‘org.springframework.kafka:spring-kafka‘)
    compile(‘org.springframework.cloud:spring-cloud-starter-bus-kafka‘)
View Code

    這裏把原先的spring-cloud-sleuth-zipkin改成spring-cloud-sleuth-stream,不用猜裏面一定是基於spring-cloud-stream實現的

  2、YAML關鍵屬性配置:

技術分享圖片
server:
  port: 8100
logging:
  level:
    org.springframework.cloud.sleuth: DEBUG
spring:
  sleuth:
    sampler:
      percentage: 1.0
View Code

  註意:這裏設置低采樣率會導致span的丟棄。我們同時設置sleuth的日誌輸出為debug

  3、同理改造其他的微服務

  

三、驗證結果

技術分享圖片

數據庫裏的相關數據:

技術分享圖片

SpringCloud學習之sleuth&zipkin【二】