Springboot集成zipkin性能監控


springboot集成zipkin

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM