Spring Cloud Sleuth + zipkin 实现服务追踪

服务追踪

Spring Cloud Sleuth实现了一种分布式的服务链路跟踪解决方案,通过使用Sleuth可以让我们快速定位某个服务的问题。

 

官方文档地址如下:

http://cloud.spring.io/spring-cloud-static/spring-cloud-sleuth/2.0.1.RELEASE/single/spring-cloud-sleuth.html

基本概念:

  1. Span,Span是基本的工作单元。Span包括一个64位的唯一ID,一个64位trace码,描述信息,时间戳事件,key-value 注解(tags),span处理者的ID(通常为IP)。
    最开始的初始Span称为根span,此span中span id和 trace id值相同。

  2. Trance,包含一系列的span,它们组成了一个树型结构

  3. Annotation,用于及时记录存在的事件。常用的Annotation如下:
  • cs - Client Sent:客户端发送一个请求,表示span的开始
  • sr - Server Received:服务端接收请求并开始处理它。(sr-cs)等于网络的延迟
  • ss - Server Sent:服务端处理请求完成,开始返回结束给服务端。(sr-ss)表示服务端处理请求的时间
  • cr - Client Received:客户端完成接受返回结果,此时span结束。(cr-cs)表示客户端接收服务端数据的时间

 如果一个服务的调用关系如下:

那么此时将Span和Trace在一个系统中使用Zipkin注解的过程图形化如下:

 

每个颜色的表明一个span(总计7个spans,从A到G),每个span有类似的信息

Trace Id = X
Span Id = D
Client Sent

此span表示span的Trance Id是X,Span Id是D,同时它发送一个Client Sent事件

spans 的parent/child关系图形化如下: 

 


 

了解完基本的一些概念后,我们来在订单服务和商品服务中,集成spring cloud sleuth以及zipkin。在两个服务的pom.xml文件中,增加如下依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>

通过这些信息,我们可以得知服务的链路,但是控制台始终是不太方便查看。所以我们需要一个图形化的工具,这时候就轮到zipkin出场了。

zipkin官网地址如下:

https://zipkin.io/

zipkin结构图:

 

我们需要搭建zipkin服务器,我这里拿了一台线上的服务做实验安装好后,使用浏览器访问9411端口,主页面如下所示:

 

然后在订单服务中将之前的sleuth依赖替换成如下依赖:

<!-- 这个依赖包含了sleuth和zipkin -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>

在配置文件中,增加zipkin相关的配置项。如下:

spring:
  ...
  zipkin:
    base-url: http://xxx.xx.xxx.xx:9411/  # zipkin服务器的地址
    sender:
      type: web  # 设置使用http的方式传输数据
  sleuth:
    sampler:
      probability: 1  # 设置抽样采集为100%,默认为0.1,即10% 

配置好后重启项目,并访问接口。到zipkin页面上就可以查看到服务的链路信息了


 

可以进入到服务链路的查看页面,在这里可以看到整条服务链路,并且可以看到每一个服务调用的耗时,也可以看到是哪一步调用发生了错误


 

点击每一行信息都可以查看其详情信息,例如我点击耗时259.197ms的那行信息,其详细信息如下


 

 

点击依赖可以看到服务之间的依赖信息

 

Zipkin默认将链路数据存储在本机内存中的,发现一段时间出现OOM异常

zipkin-server   -》 zipkin-server-shared.yml 默认配置如下

 

将链路数据存储在Mysql数据库

修改 storage.type 为mysql

配置mysql的链接信息

找到数据库初始化脚本

 

执行后如图三个表创建完成,然后build jar包,启动运行后数据成功落到数据库

 

 

将链路数据存储在ElasticSearch中

修改 storage.type 为elasticsearch

然后修改elasticsearch.hosts信息

然后build jar包,启动运行后数据成功落到ElasticSearch中

 

下载源码 : https://github.com/apache/incubator-zipkin, build jar包

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值