一:下载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,则可以看到性能检测的结果啦