SpringCloud學習之sleuth&zipkin【二】
阿新 • • 發佈:2018-04-14
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(View Code‘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‘) }
這裏將原先的 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: mysqlView 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.0View Code
註意:這裏設置低采樣率會導致span的丟棄。我們同時設置sleuth的日誌輸出為debug
3、同理改造其他的微服務
三、驗證結果
數據庫裏的相關數據:
SpringCloud學習之sleuth&zipkin【二】