一:下載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,則可以看到性能檢測的結果啦