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

转载于:https://www.cnblogs.com/mengyixin/p/9839049.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值