清凤

导航

 

本地搭建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

posted on 2020-11-03 15:57  清凤  阅读(2035)  评论(0编辑  收藏  举报