• 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、同理改造其他的微服务

      

    三、验证结果

    数据库里的相关数据:

  • 相关阅读:
    组合 聚合 依赖 关联
    effective C++ 总结
    重讲设计模式
    宏定义要加括号
    enum hack
    MFC 刷新函数:Invaldate,UpdateWindow,InvaldateRect
    MFC onchar()
    win7系统自带分区工具,能分出逻辑分区
    窗口的创建步骤
    私话编译连接运行过程以及动态库、静态库
  • 原文地址:https://www.cnblogs.com/niechen/p/8824813.html
Copyright © 2020-2023  润新知