一:下载zipkin
Docker:
docker run -d -p 9411:9411 openzipkin/zipkin
linux:
wget -O zipkin.jar 'https://search.maven.org/remote_content?g=io.zipkin.java&a=zipkin-server&v=LATEST&c=exec'
访问测试
localhost:9411
二:spring配置文件集成
1.导入jar包
在pom文件中添加:
<!-- zipkin--> <dependency> <groupId>io.zipkin.brave</groupId> <artifactId>brave-core</artifactId> <version>3.9.0</version> </dependency> <!-- https://mvnrepository.com/artifact/io.zipkin.brave/brave-http --> <dependency> <groupId>io.zipkin.brave</groupId> <artifactId>brave-http</artifactId> <version>3.9.0</version> </dependency> <dependency> <groupId>io.zipkin.brave</groupId> <artifactId>brave-spancollector-http</artifactId> <version>3.9.0</version> </dependency> <dependency> <groupId>io.zipkin.brave</groupId> <artifactId>brave-core-spring</artifactId> <version>3.9.0</version> </dependency> <dependency> <groupId>io.zipkin.brave</groupId> <artifactId>brave-spancollector-http</artifactId> <version>3.9.0</version> </dependency> <dependency> <groupId>io.zipkin.brave</groupId> <artifactId>brave-web-servlet-filter</artifactId> <version>3.9.0</version> </dependency> <dependency> <groupId>io.zipkin.brave</groupId> <artifactId>brave-okhttp</artifactId> <version>3.9.0</version> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.13</version> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.3</version> </dependency>
2.在配置文件中书写参数
zipkin.serviceName=\u5b5f\u662d\u65ed\u6d4b\u8bd5 zipkin.url=http://localhost:9411 zipkin.connectTimeout=6000 zipkin.readTimeout=6000 zipkin.flushInterval=1 zipkin.compressionEnabled=true
此处格外需要注意的为:
*serverName中:如果需要中文的话,需要中文转unicode,否则会出现乱码*
3.添加配置类
package com.mzx.zipkin.controller; import com.github.kristofa.brave.Brave; import com.github.kristofa.brave.EmptySpanCollectorMetricsHandler; import com.github.kristofa.brave.Sampler; import com.github.kristofa.brave.SpanCollector; import com.github.kristofa.brave.http.DefaultSpanNameProvider; import static com.github.kristofa.brave.Brave.Builder; import static com.github.kristofa.brave.http.HttpSpanCollector.create; import com.github.kristofa.brave.http.HttpSpanCollector; import com.github.kristofa.brave.okhttp.BraveOkHttpRequestResponseInterceptor; import com.github.kristofa.brave.servlet.BraveServletFilter; import okhttp3.OkHttpClient; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration @ConfigurationProperties(prefix = ZipkinProperties.ZIPKIN_PREFIX) public class ZipkinProperties { public static final String ZIPKIN_PREFIX = "zipkin"; /** * 服务名称 */ private String serviceName; /** * zipkin地址 */ private String url; /** * 连接时间 */ private int connectTimeout; /** * 读取时间 */ private int readTimeout; /** * 每间隔多少秒执行一次Span信息上传 */ private int flushInterval; /** * 是否启动压缩 */ private boolean compressionEnabled; public String getServiceName() { return serviceName; } public void setServiceName(String serviceName) { this.serviceName = serviceName; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public int getConnectTimeout() { return connectTimeout; } public void setConnectTimeout(int connectTimeout) { this.connectTimeout = connectTimeout; } public int getReadTimeout() { return readTimeout; } public void setReadTimeout(int readTimeout) { this.readTimeout = readTimeout; } public int getFlushInterval() { return flushInterval; } public void setFlushInterval(int flushInterval) { this.flushInterval = flushInterval; } public boolean isCompressionEnabled() { return compressionEnabled; } public void setCompressionEnabled(boolean compressionEnabled) { this.compressionEnabled = compressionEnabled; } /** * @Description: span(一次请求信息或者一次链路调用)信息收集器 * @Param: * @return: SpanCollector 控制器 * @Author: Mr.Meng * @Date: 2018/10/23 */ @Bean public SpanCollector spanCollector() { HttpSpanCollector.Config config = HttpSpanCollector.Config.builder() // 默认false,span在transport之前是否会被gzipped .compressionEnabled(compressionEnabled) .connectTimeout(connectTimeout) .flushInterval(flushInterval) .readTimeout(readTimeout) .build(); return create(url, config, new EmptySpanCollectorMetricsHandler()); } /** * @Description: 作为各调用链路,只需要负责将指定格式的数据发送给zipkin * @Param: * @return: * @Author: Mr.Meng * @Date: 2018/10/23 */ @Bean public Brave brave(SpanCollector spanCollector) { //调用服务的名称 Builder builder = new Builder(serviceName); builder.spanCollector(spanCollector); //采集率 builder.traceSampler(Sampler.ALWAYS_SAMPLE); return builder.build(); } /** * @Description: 设置server的(服务端收到请求和服务端完成处理,并将结果发送给客户端)过滤器 * @Param: * @return: 过滤器 * @Author: Mr.Meng * @Date: 2018/10/23 */ @Bean public BraveServletFilter braveServletFilter(Brave brave) { BraveServletFilter filter = new BraveServletFilter(brave.serverRequestInterceptor(), brave.serverResponseInterceptor(), new DefaultSpanNameProvider()); return filter; } /** * @Description: 设置client的(发起请求和获取到服务端返回信息)拦截器 * @Param: * @return: OkHttpClient 返回请求实例 * @Author: Mr.Meng * @Date: 2018/10/23 */ @Bean public OkHttpClient okHttpClient(Brave brave) { OkHttpClient httpClient = new OkHttpClient.Builder() .addInterceptor(new BraveOkHttpRequestResponseInterceptor( brave.clientRequestInterceptor(), brave.clientResponseInterceptor(), new DefaultSpanNameProvider())).build(); return httpClient; } }
使用@ConfigurationProperties
可能会报一个错。
意思为没有找到前缀为zipkin的配置文件,springboot1.5以后不支持该注解,官方解释为需要导入jar包
然而本人亲测没啥卵用。而事实上配置文件时读取到了的,如果有强迫症的同学,可以参考这篇文章
https://blog.csdn.net/expect521/article/details/77151094
三,启动测试
访问该项目中某个端口,再访问ip:9411,则可以看到性能检测的结果啦