此文已由作者赵计刚薪授权网易云社区发布。
欢迎访问网易云社区,了解更多网易技术产品运营经验。
本文截取自:http://blog.csdn.net/liaokailin/article/details/52077620
一、前提
1、zipkin基本知识:附8 zipkin
2、启动zipkin server:
2.1、在官网下载服务jar,http://zipkin.io/pages/quickstart.html,之后使用命令启动服务jar即可。
nohup java -jar zipkin-server-1.5.1-exec.jar &
之后,查看与该jar同目录下的nohup.out日志文件,发现其实该jar也是由springboot打成的,且内置的tomcat的启动端口是9411,如下:
2.2、打开浏览器,http://ip:9411/(host为服务启动的host)。
二、代码实现
1、service1
1.1、pom.xml
1.2、ZipkinConfig
1 package com.xxx.service1.zipkin; 2 3 import org.springframework.context.annotation.Bean; 4 import org.springframework.context.annotation.Configuration; 5 6 import com.github.kristofa.brave.Brave; 7 import com.github.kristofa.brave.EmptySpanCollectorMetricsHandler; 8 import com.github.kristofa.brave.Sampler; 9 import com.github.kristofa.brave.SpanCollector; 10 import com.github.kristofa.brave.http.DefaultSpanNameProvider; 11 import com.github.kristofa.brave.http.HttpSpanCollector; 12 import com.github.kristofa.brave.okhttp.BraveOkHttpRequestResponseInterceptor; 13 import com.github.kristofa.brave.servlet.BraveServletFilter; 14 15 import okhttp3.OkHttpClient; 16 17 /** 18 * zipkin配置 19 */ 20 @Configuration 21 public class ZipkinConfig { 22 23 @Bean 24 public SpanCollector spanCollector() { 25 HttpSpanCollector.Config spanConfig = HttpSpanCollector.Config.builder() 26 .compressionEnabled(false)//默认false,span在transport之前是否会被gzipped。 27 .connectTimeout(5000)//5s,默认10s 28 .flushInterval(1)//1s 29 .readTimeout(6000)//5s,默认60s 30 .build(); 31 return HttpSpanCollector.create("http://ip:9411", 32 spanConfig, 33 new EmptySpanCollectorMetricsHandler()); 34 } 35 36 @Bean 37 public Brave brave(SpanCollector spanCollector) { 38 Brave.Builder builder = new Brave.Builder("service1");//指定serviceName 39 builder.spanCollector(spanCollector); 40 builder.traceSampler(Sampler.create(1));//采集率 41 return builder.build(); 42 } 43 44 @Bean 45 public BraveServletFilter braveServletFilter(Brave brave) { 46 /** 47 * 设置sr、ss拦截器 48 */ 49 return new BraveServletFilter(brave.serverRequestInterceptor(), 50 brave.serverResponseInterceptor(), 51 new DefaultSpanNameProvider()); 52 } 53 54 @Bean 55 public OkHttpClient okHttpClient(Brave brave){ 56 /** 57 * 设置cs、cr拦截器 58 */ 59 return new OkHttpClient.Builder() 60 .addInterceptor(new BraveOkHttpRequestResponseInterceptor(brave.clientRequestInterceptor(), 61 brave.clientResponseInterceptor(), 62 new DefaultSpanNameProvider())) 63 .build(); 64 } 65 66 }
说明:
1.3、ZipkinBraveController
1.4、application.properties
1 server.port=8031
2、service2
2.1、pom.xml、ZipkinConfig与service1相似,config部分需要换掉serviceName为"service2"
2.2、controller
2.3、application.properties
1 server.port=8032
3、service3
3.1、pom.xml、ZipkinConfig与service1相似,config部分需要换掉serviceName为"service3"
3.2、controller
3.3、application.properties
1 server.port=8033
4、service4
4.1、pom.xml、ZipkinConfig与service1相似,config部分需要换掉serviceName为"service4"
4.2、controller
4.3、application.properties
1 server.port=8034
三、测试
swagger访问localhost:8031/zipkin/brave/service1/test1,之后查看zipkin webUI即可。
结果:
1、查看调用依赖:
2、查看调用时间对比
点击第4个span,查看调用详情:
更多网易技术、产品、运营经验分享请点击。