spring-cloud-sleuth 项目搭建

        微服务的出现使得业务得到解放,将各个业务分散到服务中,同时也出现了其他问题比如某个服务出现慢接口成为系统的瓶颈,spring-cloud-sleuth能解决这个问题,顺便甩锅,废话不多说下面上教程。

        spring-cloud-sleuth 的存储方式可以使用mysql,elasticsearch。收集方式可以使用kafka,rabbitmq和rest接口,这里需要了解 springcloud Dalston(以下成为D版本)和Edgware(以下成为E版本)是一个分水岭,D以及以下版本只支持rest方式,E以及以上版本只支持mq(rabbitmq和kafka)的方式。sleuth2.0以上版本官方建议直接下载jar包使用 以下是下载地址 https://www.oschina.net/news/97221/spring-cloud-sleuth-2-released 。本篇介绍rest和rabbitmq(虽然比较建议kafka)的方式,采用elasticsearch存储(尝试了mysql 查询太慢了)

        服务端:

        直接下载jar包 以下附带启动方式

        nohup java -jar zipkin.jar --zipkin.storage.StorageComponent=elasticsearch --zipkin.storage.type=elasticsearch --zipkin.storage.elasticsearch.username='es的账号' --zipkin.storage.elasticsearch.password='es的密码' --zipkin.storage.elasticsearch.hosts='es的服务器地址' --zipkin.storage.elasticsearch.cluster=elasticsearch --zipkin.storage.elasticsearch.index=zipkin --zipkin.storage.elasticsearch.timeout=3000 --zipkin.storage.elasticsearch.index-shards=5 --zipkin.storage.elasticsearch.index-replicas=1 --zipkin.collector.rabbitmq.addresses='rabbitmq的地址' --zipkin.collector.rabbitmq.port='rabbitmq的端口 默认是5672' --zipkin.collector.rabbitmq.username='rabbitmq的用户名' --zipkin.collector.rabbitmq.password='rabbitmq的密码' --zipkin.collector.rabbitmq.virtual-host=vhost1 &

       启动后访问 http://{ip}::9411  出现页面就成功了,这里有个点纠结了很久就是 es 需要允许自动创建索引 action.auto_create_index:true 不然数据无法存入,连错误也不错打印。

    客户端:

    客户端分为D版和E版,以下一一介绍

     D版:

     引入 pom包

        org.springframework.cloud

        spring-cloud-starter-zipkin

在application.properties里面添加

#zipkin采样率,默认为0.1,改为1后全采样,但是会降低接口调用效率

spring.sleuth.sampler.percentage=1.0

#zipkin服务器地址

spring.zipkin.base-url=http://{ip}:9411

之后启动服务就能接收到

    E版:

    E版就比较复杂了,因为项目里面可能已经用到rabbitmq,sleuth作为行为数据理论上不应该影响业务的mq,这里需要重写sleuth的mq配置

    在 

 # 2.0版本采集率 (注意 1.0和2.0的这个参数是不同的)

spring.sleuth.sampler.probability=1.0

# 队列的名字 这个用默认的就行

spring.zipkin.rabbitmq.queue=zipkin

# sleuth rabbitmq 配置

spring.sleuth.rabbitmq.addresses='rabbitmq的地址'

spring.sleuth.rabbitmq.port=5672

spring.sleuth.rabbitmq.username='rabbitmq的用户名'

spring.sleuth.rabbitmq.password='rabbitmq的密码'

spring.sleuth.rabbitmq.virtual-host=vhost1

新建一个java类

ZipkinRabbitSenderConfiguration.java (名字自定义没关系)

 @Component

public class ZipkinRabbitSenderConfiguration {

    @Value("${spring.zipkin.rabbitmq.queue:zipkin}")

    private String queue;

    @Value("${spring.sleuth.rabbitmq.addresses}")

    private String addresses;

    @Value("${spring.sleuth.rabbitmq.port}")

    private int port;

    @Value("${spring.sleuth.rabbitmq.username}")

    private String username;

    @Value("${spring.sleuth.rabbitmq.password}")

    private String password;

    @Value("${spring.sleuth.rabbitmq.virtual-host}")

    private String virtualHost;

    @Bean

    public Sender rabbitSender() {

        CachingConnectionFactory connectionFactory = new CachingConnectionFactory();

        connectionFactory.setHost(addresses);

        connectionFactory.setPort(port);

        connectionFactory.setUsername(username);

        connectionFactory.setPassword(password);

        connectionFactory.setVirtualHost(virtualHost);

        return RabbitMQSender.newBuilder()

                .connectionFactory(connectionFactory.getRabbitConnectionFactory())

                .queue(this.queue).addresses(addresses).build();

    }

}

至于为什么这么写可以看一下sleuth.client的源码

这样就可以完成了

你可能感兴趣的:(spring-cloud-sleuth 项目搭建)