Zipkin 持久化存入Elasticsearch

一.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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章