• Zipkin初探 + 与SpringBoot的集成+ 使用HTTP方式传送数据给zipkin server


    本地搭建zipkin server

    下载:

    启动(在下载目录): java -jar zipkin-server-2.22.1-exec.jar

    访问:http://127.0.0.1:9411/zipkin/

    SpringBoot集成zipkin文档

           https://cloud.spring.io/spring-cloud-sleuth/1.3.x/multi/multi_spring-cloud-sleuth.html,关键看第十章: Sending spans to Zipkin

    Spring Boot集成zipkin的方式

    SpringBoot application.yml里的配置方式

    spring:
      zipkin:
        base-url: http://127.0.0.1:9411    #zipkin server 的地址
        service: 
          name: customersearchapis   #默认会显示Spring Application Name,但是可以覆盖Service地址
        sender: 
          type: web    #如果ClassPath里没有kafka, active MQ, 默认是web的方式
      sleuth:
        sampler:
          probability: 1.0  #100%取样
    logging:
      level:
        root: info
        # for zipkin sender, 如果使用 web的方式,可以在日志中看到与zipkin的通信
        org.springframework.web: DEBUG

    Gradle:

    implementation 'org.springframework.cloud:spring-cloud-starter-zipkin

    加上这个Starter会Sleuth相关的包以及下面zipkin相关的包都引入

     

     使用HTTP传送给zipkin的输出日志:

     将HTTP parameter 加到zipkin tag中

    @Component
    @Order(TraceWebServletAutoConfiguration.TRACING_FILTER_ORDER + 1)
    public class CustomizedHttpTraceFilter extends GenericFilterBean {
    
        private final Tracer tracer;
    
        CustomizedHttpTraceFilter(Tracer tracer) {
            this.tracer = tracer;
        }
    
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
                throws IOException, ServletException {
            Span currentSpan = this.tracer.currentSpan();
            // do nothing if current span is null
            if (currentSpan == null) {
                chain.doFilter(request, response);
                return;
            }
            // add parameter to tag
            ObjectMapper mapper = new ObjectMapper();
            currentSpan.tag("Http.parameter", mapper.writeValueAsString(request.getParameterMap()));
            chain.doFilter(request, response);
        }
        

    ZIPKIN server 存储数据到ElasticSearch

    java -DSTORAGE_TYPE=elasticsearch -DES_HOSTS=ES-host -DES_INDEX=zipkin -DES_INDEX_SHARDS=3  -DES_INDEX_REPLICAS=2 -DES_USERNAME=userName -DES_PASSWORD=password  -DES_SSL_NO_VERIFY=true -DES_HTTP_LOGGING=basic  -jar zipkin-server-2.22.1-exec.jar
    

      

    1. zipkin是服务端,用于查询分析、收集和持久化链路数据
    2. brave则是zipkin官方出品的Java语言的链路数据采集插件。同理还有js、go版本的采集插件

      业界开源的主流链路跟踪系统:

      1. skywalking
      2. pinpoint
      3. zipkin
      4. jaeger

      主要对比skywalking和zipkin

       skywalkingzipkin
      内部实现方式 javaagent,字节码增强 aop插件
      语言支持 多语言 多语言
      性能
      插件扩展 困难 容易
      接入成本 低,开发无感知 低,开发需要配置
      社区支持

      可以看到

      • skywalking相较于zipkin的优势在于接入成本低、性能稍好
      • zipkin相较于skywalking的优势在于插件扩展容易

      我们最终选择的是zipkin

  • 相关阅读:
    int string java 呼转
    E:Encountered a section with no Package: header, E:Problem with MergeList /var/lib/apt/lists/******
    东南大学课程表爬虫
    文件传输器
    springmvc-项目启动初始化类
    分享一段线程队列--生产者和消费者代码
    maven-assembly-plugin 插件打包一个bug手动解决方式
    dubbo Main独立运行,脱离web容器
    Logstash5.6.1-Kafka插件配置
    kafka 设置开机启动
  • 原文地址:https://www.cnblogs.com/Ivyduan/p/13920740.html
Copyright © 2020-2023  润新知