本地搭建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
- zipkin是服務端,用於查詢分析、收集和持久化鏈路數據
- brave則是zipkin官方出品的Java語言的鏈路數據采集插件。同理還有js、go版本的采集插件
業界開源的主流鏈路跟蹤系統:
- skywalking
- pinpoint
- zipkin
- jaeger
主要對比skywalking和zipkin
skywalking zipkin 內部實現方式 javaagent,字節碼增強 aop插件 語言支持 多語言 多語言 性能 好 好 插件擴展 困難 容易 接入成本 低,開發無感知 低,開發需要配置 社區支持 好 好 可以看到
- skywalking相較於zipkin的優勢在於接入成本低、性能稍好
- zipkin相較於skywalking的優勢在於插件擴展容易
我們最終選擇的是zipkin