本文共 5368 字,大约阅读时间需要 17 分钟。
Spring Cloud Sleuth实现对Spring cloud 分布式链路监控
本文介绍了和Sleuth相关的内容,主要内容如下:Span
Span是基本的工作单元。Span包括一个64位的唯一ID,一个64位trace码,描述信息,时间戳事件,key-value 注解(tags),span处理者的ID(通常为IP)。 最开始的初始Span称为根span,此span中span id和 trace id值相同。Trance
包含一系列的span,它们组成了一个树型结构Annotation
用于及时记录存在的事件。常用的Annotation如下如果一个服务的调用关系如下:
那么此时将Span和Trace在一个系统中使用Zipkin注解的过程图形化:
每个颜色的表明一个span(总计7个spans,从A到G),每个span有类似的信息
Trace Id = XSpan Id = DClient Sent
span表示span的Trance Id是X,Span Id是D,同时它发送一个Client Sent事件
spans 的parent/child关系图形化如下:
在Zipkin中展示了上图的跟踪信息,红框里是对上图调用span的跟踪
但是你点击这个trace时,我们只看到4个span
为什么两个界面显示的span数量不同,一个是7,一个4.
所以我们计算物理spans有7个:
从逻辑上说,我们只看到4个span:
如果调用链路中发生接口调用失败,zipkin会默认使用红色展示信息,如下图:
点击红色的span,可以看到详细的失败信息:本节演示在Spring Cloud中集成Sleuth并将链路监控数据传送到Zipkin,使用Zipkin展示数据,并配置mysql进行数据持久化
cloud-registration-center
注册中心cloud-service-zipkin
提供测试服务接口,对外提供有两个接口: - 调用成功后,马上返回一个结果: - 调用成功后,服务sleep 5s后再返回:cloud-consumer-zipkin
消费服务 此服务会通过Feign调用cloud-service-zipkin里提供的两个接口(/zipkin/sleep和/zipkin/simple),我们访问如下URL会调用的对应的接口:以上3个服务的代码比较简单,这里代码略,可以自己看github里的代码。下文中只列出和Sleuth和Zipkin相关的配置。
cloud-dashboard-zipkin
配置Zipkin服务,提供可视化链路监控 Zipkin首页:在cloud-service-zipkin和cloud-consumer-zipkin中启动sleuth,sleuth会收集spans信息,并使用http异步地将spans 信息发送到Zipkin,然后Zipkin展示信息
cloud-service-zipkin和cloud-consumer-zipkin配置Sleuth+Zipkin
2个工程中为了集成Sleuth和Zipkin,需要在普通工程基础上增加如下配置:org.springframework.cloud spring-cloud-starter-sleuth org.springframework.cloud spring-cloud-starter-zipkin
spring: zipkin: enabled: true # zipkkin dashboard的地址:通过真实IP地址访问 baseUrl: http://localhost:17601/ # 通过cloud-dashboard-zipkin注册到注册中心的服务名称访问,本版本(spring-cloud-sleuth-core-1.2.5.RELEASE)不支持,需要从spring-cloud-sleuth-core-1.3.0.RELEASE开始支持这个功能 # 配置如下: # baseUrl: http://cloud-dashboard-zipkin/ sleuth: sampler: # 默认值为0.1f,现在为了测试设置100%采集 percentage: 1
cloud-dashboard-zipkin
配置zipkin服务org.springframework.cloud spring-cloud-starter-zipkin io.zipkin.java zipkin-autoconfigure-ui io.zipkin.java zipkin-server
配置参数
# portserver: port: 17601spring: application: # 本服务注册到注册到服务器的名称, 这个名称就是后面调用服务时的服务标识符 name: cloud-dashboard-zipkineureka: client: serviceUrl: # 服务器注册/获取服务器的zone defaultZone: http://127.0.0.1:10761/eureka/ # defaultZone: http://192.168.21.3:10761/eureka/,http://192.168.21.4:10761/eureka/ instance: prefer-ip-address: true
pplication-zipkin-http.yml
spring: zipkin: enabled: false
启动类:
@EnableZipkinServer:注解此类为Zipkin服务4.3. 测试启动zipkin服务,提供可视化链路监控
Zipkin访问地址:我们演示链路跟踪,访问以下两个请求:
:正常方法 :访问超时进入zipkin,访问成功为蓝色,失败为红部。同时显示各个服务花费的时间
点击蓝色记录,进入详细界面
可知整个接口花费约19ms,cloud-zipkin-service的业务执行15ms,cloud-zipkin-consumer访问cloud-zipkin-service的 网络延迟为2ms,返回结果给cloud-zipkin-service的网络延迟是4s点击cloud-zipkin-service得到更精确的数据
默认情况,zipkin存储记录到内存,如果服务重启,则所有记录丢失。为了保证持久性,zipkin支持Mysql、Elasticsearch、Cassandra存储。我们演示为zipkin配置MYSQL数据库,其它两种配置类似,本文略
pom.xml为cloud-dashboard-zipkin引入新jar配置参数:application-zipkin-http.yml:
配置启动时会根据classpath:/mysql.sql初始化数据库重启服务,服务成功后,查看数据库,自动生成数据库如此数据库配置完毕,所有的spans信息存储到数据库中,重启服务,也不会丢失记录
本版本(spring-cloud-sleuth-core-1.2.5.RELEASE)支持集成spring-cloud-sleuth-stream,但是在新版本从spring-cloud-sleuth-core-1.3.0.RELEASE开始不支持spring-cloud-sleuth-stream。推荐直接使用通过集成RabbitMQ 或 Kafka。关于集成RabbitMQ 或 Kafka,关键是引入spring-rabbit 或 spring-kafka依赖包。默认的目的名称为zipkin.
对于这个的使用demo。这里暂时略以上的详细的代码见下面
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hry2015/article/details/78905489