SpringCloud学习之sleuth&zipkin

Posted 专注Java后端技术

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringCloud学习之sleuth&zipkin相关的知识,希望对你有一定的参考价值。

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

一、将追踪数据存放到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

 

 

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

  这步改造主要用以提高性能与稳定性,服务将收集到的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的主要内容,如果未能解决你的问题,请参考以下文章

SpringCloud学习之SpringCloudStream&集成kafka

springcloud-Config&Bus&Stream&Sleuth+Zipkin

SpringCloud学习之feign

Springcloud学习之Nacos

SpringCloud gateway学习之helloWorld

SpringCloud学习之整合eureka