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