您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
   
 
     
   
 订阅
  捐助
Spring Cloud Sleuth + zipkin 实现服务追踪
 
  3042  次浏览      16
 2019-9-4  
 
编辑推荐:
本文来自于51CTO,文章首先讲解了一些概念,我们来在订单服务和商品服务中,集成spring cloud sleuth以及zipkin等相关。

服务追踪

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

官方文档地址

一些概念:

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>

 

为了更详细的查看服务通信时的日志信息,我们将openfeign的日志级别设置为debug。在两个项目的配置文件中,加入如下内容即可:

logging:
level:
org.springframework.cloud.openfeign: debug

启动订单、商品服务项目,然后访问创建订单的接口,订单服务的控制台会输出一段这样的信息:

[order,6c8ecdeefb0fc723,cc4109a6e8e56d1c,false]

 

商品服务的控制台也会输出类似的信息,如下:

[product,6c8ecdeefb0fc723,40cdc34e745d59e7,false]

说明:

product: 看也知道是服务名称

6c8ecdeefb0fc723: 是TranceId,一条链路中,只有一个TranceId

40cdc34e745d59e7:则是spanId,链路中的基本工作单元id

false:表示是否将数据输出到其他服务,true则会把信息输出到其他可视化的服务上观察

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

zipkin官网地址

zipkin结构图:

我们需要搭建zipkin服务器,我这里拿了一台线上的服务做实验,使用docker安装的zipkin,安装过程如下:

[root@01server ~]# docker run -d -p 9411:9411 openzipkin/zipkin
Unable to find image 'openzipkin/zipkin:latest' locally
latest: Pulling from openzipkin/zipkin
ff3a5c916c92: Pull complete
a8906544047d: Pull complete
590b87a38029: Pull complete
5a45314016bd: Pull complete
747e7e2c6558: Pull complete
d010e5d815f5: Pull complete
Digest: sha256: e130f6191ce6763f59250c44ca9a 265ff9eca4c4b9a22c240403a810312322 7e
Status: Downloaded newer image for openzipkin/zipkin:latest
e1fd796bc74175543ffce538b 44cffcb013e75008acbc4248b4ec373a49df97 f
[root@01server ~]#

 

安装好后,使用浏览器访问9411端口,主页面如下所示:

Spring Cloud Sleuth + zipkin 实现服务追踪

然后在订单服务中将之前的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页面上就可以查看到order服务的链路信息了:

会有红色的信息表示有错误,点击上图中的红色信息后,可以进入到服务链路的查看页面,在这里可以看到整条服务链路,并且可以看到每一个服务调用的耗时,也可以看到是哪一步调用发生了错误:

 

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

   
3042 次浏览       16
相关文章

企业架构、TOGAF与ArchiMate概览
架构师之路-如何做好业务建模?
大型网站电商网站架构案例和技术架构的示例
完整的Archimate视点指南(包括示例)
相关文档

数据中台技术架构方法论与实践
适用ArchiMate、EA 和 iSpace进行企业架构建模
Zachman企业架构框架简介
企业架构让SOA落地
相关课程

云平台与微服务架构设计
中台战略、中台建设与数字商业
亿级用户高并发、高可用系统架构
高可用分布式架构设计与实践