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

      skywalking zipkin
    內部實現方式 javaagent,字節碼增強 aop插件
    語言支持 多語言 多語言
    性能
    插件擴展 困難 容易
    接入成本 低,開發無感知 低,開發需要配置
    社區支持

    可以看到

    • skywalking相較於zipkin的優勢在於接入成本低、性能稍好
    • zipkin相較於skywalking的優勢在於插件擴展容易

    我們最終選擇的是zipkin


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM