SpringCloud学习之sleuth&zipkin【二】

小编 2026-06-04 阅读:499 评论:0
  这篇文章我们解决上篇链路跟踪的遗留问题一、将追踪数据存放到MySQL数据库中  默认情况下z...

  这篇文章我们解决上篇链路跟踪的遗留问题

一、将追踪数据存放到MySQL数据库中

  默认情况下zipkin将收集到的数据存放在内存中(In-Memeroy),但是不可避免带来了几个问题:

    • 在服务重新启动后,历史数据丢失。
    • 在数据量过大的时候容易造成OOM错误

  通常做法是与mysql或者ElasticSearch结合使用,那么我们先把收集到的数据先存到Mysql数据库中

  1、改造zipkin-server的依赖

    gradle配置:

SpringCloud学习之sleuth&zipkin【二】SpringCloud学习之sleuth&zipkin【二】
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的支持也加进来

    SpringCloud学习之sleuth&zipkin【二】

    注意:此处脚本最好在数据库中执行一下,当然我们也可以在下面的配置文件中做初始化的相关配置

  2、YAML中的关键配置项:

SpringCloud学习之sleuth&zipkin【二】SpringCloud学习之sleuth&zipkin【二】
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:9092server:  port: 9000zipkin:  storage:    type: mysql
View Code

  注意zipkin.storage.type 指定为mysql

  3、更改启动类

SpringCloud学习之sleuth&zipkin【二】SpringCloud学习之sleuth&zipkin【二】
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@SpringBootApplicationpublic class ZipkinServerApplication {    public static void main(String[] args) {        SpringApplication.run(ZipkinServerApplication.class, args);    }}
View Code

  这里注意将@EnableZipkinServer改成@EnableZipkinStreamServer

 

 

二、将收集信息改成异步发送

  这步改造主要用以提高性能与稳定性,服务将收集到的span无脑的往消息中间件上丢就可以了,不用管zipkin的地址在哪里。

  1、改造Order-Server依赖:

    gradle:

SpringCloud学习之sleuth&zipkin【二】SpringCloud学习之sleuth&zipkin【二】
    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关键属性配置:

SpringCloud学习之sleuth&zipkin【二】SpringCloud学习之sleuth&zipkin【二】
server:  port: 8100logging:  level:    org.springframework.cloud.sleuth: DEBUGspring:  sleuth:    sampler:      percentage: 1.0
View Code

  注意:这里设置低采样率会导致span的丢弃。我们同时设置sleuth的日志输出为debug

 

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

 

  

三、验证结果

SpringCloud学习之sleuth&zipkin【二】

数据库里的相关数据:

SpringCloud学习之sleuth&zipkin【二】

 

版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

热门文章
  • 机房智能化温湿度解决方式之POE供电以太网温湿度传感器

    机房智能化温湿度解决方式之POE供电以太网温湿度传感器
    机房智能化温湿度解决方式之POE供电以太网温湿度传感器 北京盈创力和电子科技有限公司 智能型TCP网口温湿度记录仪 北京IP网络温湿度记录仪厂家,北京盈创力和 北京智能型TCP网口温湿度记录仪IP网络温湿度记录仪是一种新型的基于TCP/IP协议双绞线以太网标准温湿度采集模块,利用它可以实现现场温度值、相对湿度值的采集,同时利用其自身的RJ45通信接口可以方便地和机房监控主机或交换机集线器进行联网。 工作于-40℃~85℃工业级带...
  • Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering

    Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering
    Problem Statement 我们考虑一个具有马尔可夫性质、非线性、非高斯的状态空间模型(State Space Model):对于一个时间序列上的观测结果{yt,t∈N}\\{ y_t , t \\in N \\}{yt​,t∈N},我们认为每个观测结果yty_tyt​的生成依赖于一个无法直接观察的隐变量xt∈{xt,t∈N}x_t \\in \\{x_t , t \\in N \\}xt​∈{xt​,t∈N},即:p(...
  • HTTP状态保持的原理

    HTTP状态保持的原理
    a)在用户登录之后,浏览器返回响应的时候会在响应中添加上cookieb)浏览器接收到cookie之后会自动保存c)当用户再次请求同一服务器中的其他网页的时候,浏览器会自动带上之前保存的cookied)服务接收到请求之后可以请 request 对象中取到cookie 判断当前用户是否登录  Http是无状态的,就是连接时数据互通,关闭后...
  • Hive 系统函数及示例

    Hive 系统函数及示例
    查看所有系统函数 show functions; 函数分类 内置函数【系统函数】 数学函数: floor、round、ceil、cos、log2等 字符串函数: length、reverse、trim、lower、get_json_object、repeat等 收集函数: size 转换函数: cast 日期函数: year、month、datediff、date、date_add等 条件函数: coalesce、case…w...
  • CSRF的原理和防范措施

    CSRF的原理和防范措施
    a)攻击原理:i.用户C访问正常网站A时进行登录,浏览器保存A的cookieii.用户C再访问攻击网站B,网站B上有某个隐藏的链接或者图片标签会自动请求网站A的URL地址,例如表单提交,传指定的参数iii.而攻击网站B在访问网站A的时候,浏览器会自动带上网站A的cookieiv.所以网站A在接收到请求之后可判断当前用户是登录状态,所以...
标签列表