美文网首页
Spring Cloud Sleuth 整合Zipkin、Rab

Spring Cloud Sleuth 整合Zipkin、Rab

作者: D调_Dream | 来源:发表于2017-06-02 14:16 被阅读0次

    Sleuth官网地址   http://cloud.spring.io/spring-cloud-static/Camden.SR7/#_spring_cloud_sleuth

            微服务之间是通过轻量级的通讯协议进行通信,而网络常常也相对脆弱、网络资源也相当有限。 如果我们能够跟踪每一个请求,了解请 求经过哪些微服务、请求的耗时、网络延迟、业务逻辑耗时这些指标,这样我们就能够更好的分析系统的瓶颈、针对的解决系统问题。因此、我们微服务体系中加上跟踪还是很有必要的。

    RabbitMQ用于的微服务和Zipkin服务端的通信(取代微服务和Zipkin服务端通过http通信,实现了微服务和Zipkin服务端的解耦,微服务不需要知道Zipkin服务端的网络地址,一些情况下微服务可能和Zipkin服务端网络不通(Zipkin服务端宕机),使用http通信收集方式将无法工作)

    Zipkin提供了一个很友好的界面、利于分析追踪数据(没有尝试过使用elk分析追踪数据(不再需要zipkin服务端,直接分析日志数据))。

    Mysql或Elasticsearch实现了追踪数据的持久化(Zipkin默认是将追踪数据存在内存中,如服务端重启或宕机,会导致历史数据丢失,所以追踪数据持久化很有必要).

    Spring Cloud Sleuth 提供了一套分布式跟踪解决方案,先了解一下它的术语:

    Span:基本工作单元,例如,在一个新建的span中发送一个RPC等同于发送一个回应请求给RPC,span通过一个64位ID唯一标识,trace以另一个64位ID表示,span还有其他数据信息,比如摘要、时间戳事件、关键值注释(tags)、span的ID、以及进度ID(通常是IP地址)

    span在不断的启动和停止,同时记录了时间信息,当你创建了一个span,你必须在未来的某个时刻停止它。

    Trace:一系列spans组成的一个树状结构,例如,如果你正在跑一个分布式大数据工程,你可能需要创建一个trace。

    Annotation:用来及时记录一个事件的存在,一些核心annotations用来定义一个请求的开始和结束

    cs   - Client Sent -客户端发起一个请求,这个annotion描述了这个span的开始

    sr   - Server Received -服务端获得请求并准备开始处理它,如果将其sr减去cs时间戳便可得到网络延迟

    ss  - Server Sent -注解表明请求处理的完成(当请求返回客户端),如果ss减去sr时间戳便可得到服务端需要的处理请求时间

    cr  - Client Received -表明span的结束,客户端成功接收到服务端的回复,如果cr减去cs时间戳便可得到客户端从服务端获取回复的所有所需时间

    将Span和Trace在一个系统中使用Zipkin注解的过程图形化:

    原有微服务整合Spring Cloud Sleuth Zipkin 和 RabbitMQ

    对原有微服务只要加依赖和配置就可以了

    1.  在需要跟踪的微服务pom中添加如下依赖:

    sleuth、zipkin、rabbitmq依赖

    2.  在其配置文件中加入rabbitmq和sleuth的配置:

    rabbitmq和sleuth配置

    spring.sleuth.sampler.percentage:指定需要取样的请求百分比,默认值是0.1,分布式系统中,数据量也许会应该大。所以,可以根据各自的项目情况,设置合适的采样非常重要。这里因为是开发阶段,我把采样设置成了1.0,即100%。

    如果不使用中间件(rabbitmq),还需要配置一个参数指定Zipkin服务器地址(默认访问http://localhost:9411)

    spring.zipkin.base-url:http://192.168.1.178:9411

    这里配置的地址需改成自己设置的Zipkin地址。

    Zipkin服务端:

    1. 创建一个artifactId为zipkin-service 的Maven工程,并为项目添加如下pom依赖:

    包括了zipkin、rabbitmq、elasticsearch的依赖 mysql数据库连接依赖

    如果使用mysql做数据的持久化的话,这两个依赖不能少。

    2. 编写配置文件,在application.yml中添加如下内容:

    mysql、zipkin、elasticsearch配置

    zipkin.storage.type配置持久化类型,这里配置了elasticsearch,如果要使用mysql的话,需改为mysql

    3. 编写启动类,使用@EnableZipkinStreamServer注解,生命一个Zipkin Server。

    spring boot启动类

    我这里加了@EnableDiscoveryClient注解,把 zipkin-service也当成微服务注册

    4. Zipkin界面介绍

    trace列表

    可以根据时间、微服务、请求类型等刷选trace列表

    trace详情 span详情 微服务之间依赖关系

    可视化界面有利于我们分析为服务之间的依赖关系,可以选择时间来刷选

    5. elasticsearch

    elasticsearch持久化的数据

    elasticsearch的安装部署这里就不说了

    6. mysql

    自动生成的三张表

    Zipkin的jar包中有个mysql.sql文件,用于初始化数据库表结构 。

    初次写文章,如有错误、疏漏请大家多多包涵指教。(由于不知道代码如何在简书上展示,所以全部是截图的)

    QQ:656765117      邮件:hz656765117@163.com   

    附上Zipkin服务端代码: http://git.oschina.net/huangzhuo92/zipkin-service



    相关文章

      网友评论

          本文标题:Spring Cloud Sleuth 整合Zipkin、Rab

          本文链接:https://www.haomeiwen.com/subject/zggyfxtx.html