一.Zipkin服務端
1.1 依賴
<properties>
<java.version>1.8</java.version>
<zipkin.version>2.9.4</zipkin.version>
<zipkin.es.version>2.8.4</zipkin.es.version>
</properties>
<dependencies>
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-server</artifactId>
<version>${zipkin.version}</version>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-autoconfigure-ui</artifactId>
<scope>runtime</scope>
<version>${zipkin.version}</version>
</dependency>
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-autoconfigure-storage-elasticsearch-http</artifactId>
<version>${zipkin.es.version}</version>
<optional>true</optional>
</dependency>
</dependencies>
1.2. 配置文件
zipkin.storage.StorageComponent=elasticsearch
zipkin.storage.type=elasticsearch
#可以做集羣,我用的本地測試沒有部署elastic集羣
zipkin.storage.elasticsearch.hosts=192.168.42.40:9200
zipkin.storage.elasticsearch.cluster=elasticsearch
zipkin.storage.elasticsearch.index=zipkin
zipkin.storage.elasticsearch.index-shards=5
zipkin.storage.elasticsearch.index-replicas=1
maxHttpHeaderSize=8192
action.auto_create_index=true
1.3. 啓動類
@EnableZipkinServer//開啓ZipkinServe
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class ZipkinApplication {
public static void main(String[] args) {
SpringApplication.run(ZipkinApplication.class, args);
}
}
二、客戶端配置
2.1 SpringBoot 版本
2.1.1 依賴
<!-- zipkin-->
<dependency>
<groupId>io.zipkin.brave</groupId>
<artifactId>brave-core</artifactId>
<version>3.10.0</version>
</dependency>
<dependency>
<groupId>io.zipkin.brave</groupId>
<artifactId>brave-spancollector-http</artifactId>
<version>3.10.0</version>
</dependency>
<dependency>
<groupId>io.zipkin.brave</groupId>
<artifactId>brave-web-servlet-filter</artifactId>
<version>3.10.0</version>
</dependency>
<dependency>
<groupId>io.zipkin.brave</groupId>
<artifactId>brave-okhttp</artifactId>
<version>3.10.0</version>
</dependency>
<!-- zipkin-->
2.1.2 全局配置
@Data
@Configuration
@ConfigurationProperties(prefix = ZipkinConfig.ZIPKIN_PREFIX)
public class ZipkinConfig {
public static final String ZIPKIN_PREFIX = "zipkin";
//服務名稱
private String serviceName;
//地址
private String url;
//連接時間
private int connectTimeout;
//讀取時間
private int readTimeout;
//每間隔多少秒執行一次Span信息上傳
private int flushInterval;
//是否啓動壓縮
private boolean compressionEnabled;
/**
* @Description span(一次請求信息或者一次鏈路調用)信息收集器
* @UserModule: exam-paper
* @author Dylan
* @date 2020/1/3
* @param
* @return com.github.kristofa.brave.SpanCollector
*/
@Bean
public SpanCollector spanCollector() {
Config config = Config.builder()
// 默認false,span在transport之前是否會被gzipped
.compressionEnabled(compressionEnabled)
.connectTimeout(connectTimeout)
.flushInterval(flushInterval)
.readTimeout(readTimeout)
.build();
return create(url, config, new EmptySpanCollectorMetricsHandler());
}
/**
* @Description 作爲各調用鏈路,只需要負責將指定格式的數據發送給zipkin
* @UserModule: exam-paper
* @author Dylan
* @date 2020/1/3
* @param spanCollector
* @return com.github.kristofa.brave.Brave
*/
@Bean
public Brave brave(SpanCollector spanCollector) {
//調用服務的名稱
Builder builder = new Builder(serviceName);
builder.spanCollector(spanCollector);
//採集率
builder.traceSampler(Sampler.ALWAYS_SAMPLE);
return builder.build();
}
/**
* @Description 設置server的(服務端收到請求和服務端完成處理,並將結果發送給客戶端)過濾器
* @UserModule: exam-paper
* @author Dylan
* @date 2020/1/3
* @param brave
* @return com.github.kristofa.brave.servlet.BraveServletFilter
*/
@Bean
public BraveServletFilter braveServletFilter(Brave brave) {
BraveServletFilter filter = new BraveServletFilter(brave.serverRequestInterceptor(),
brave.serverResponseInterceptor(), new DefaultSpanNameProvider());
return filter;
}
/**
* @Description 設置client的(發起請求和獲取到服務端返回信息)攔截器
* @UserModule: exam-paper
* @author Dylan
* @date 2020/1/3
* @param brave
* @return okhttp3.OkHttpClient
*/
@Bean
public OkHttpClient okHttpClient(Brave brave) {
OkHttpClient httpClient = new OkHttpClient.Builder()
.addInterceptor(new BraveOkHttpRequestResponseInterceptor(
brave.clientRequestInterceptor(),
brave.clientResponseInterceptor(),
new DefaultSpanNameProvider())).build();
return httpClient;
}
}
2.1.3 配置文件
zipkin.serviceName=exam-app
zipkin.url=http://localhost:8096
zipkin.connectTimeout=6000
zipkin.readTimeout=6000
zipkin.flushInterval=1
zipkin.compressionEnabled=true
management.endpoints.web.exposure.include="*"
2.2 SpringCloud 版本
2.2.1 依賴
<!--引入的zipkin依賴-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
2.2.2 配置文件
zipkin:
base-url: http://localhost:8096
# 關閉服務發現,否則Spring Cloud會把zipkin的url當做服務名稱
discoveryClientEnabled: false
sender:
type: web
sleuth:
sampler:
probability: 1 # 設置抽樣採集率爲100%,默認爲0.1,即10%
三. 驗證
3.1 zipkin UI驗證
訪問消費者之後,在zipkin裏會顯示
這時我們關掉服務,再重啓,數據還在,說明持久化成功!
3.2 kibana驗證
創建索引
查看
3.3 ES-Head驗證
工具安裝教程
1. Elasticsearch6.x 安裝以及一些坑 https://blog.csdn.net/weixin_38937840/article/details/103897483
2.elasticsearch-head 安裝以及踩過的坑 https://blog.csdn.net/weixin_38937840/article/details/103897606
3.kibana安裝以及踩過的坑https://blog.csdn.net/weixin_38937840/article/details/103897715
下方有免費書籍的地址,大家可以看看是否對自己有用!
今天的分享就到這裏,希望對大家有所幫助
關注 Java有貨領取更多資料
聯繫小編。微信:372787553,帶您進羣互相學習
左側小編微信,右側獲取免費資料
技術博客:https://blog.csdn.net/weixin_38937840
免費書籍:https://github.com/Dylan-haiji/Programmer-Learning-materials
SpringCloud學習代碼: https://github.com/Dylan-haiji/javayh-cloud
Redis、Mongo、Rabbitmq、Kafka學習代碼: https://github.com/Dylan-haiji/javayh-middleware
AlibabaCloud學習代碼:https://github.com/Dylan-haiji/javayh-cloud-nacos
SpringBoot+SpringSecurity實現自定義登錄學習代碼:https://github.com/Dylan-haiji/javayh-distribution