11 SpringCloud中服务链路追踪:Spring Cloud Sleuth

本文出自方志朋的博客
这篇文章主要讲述服务追踪组件zipkin,Spring Cloud Sleuth集成了zipkin组件。

一、简介

Add sleuth to the classpath of a Spring Boot application (see below for Maven and Gradle examples), and you will see the correlation data being collected in logs, as long as you are logging requests.

—— 摘自官网

Spring Cloud Sleuth 主要功能就是在分布式系统中提供追踪解决方案,并且兼容支持了 zipkin,你只需要在pom文件中引入相应的依赖即可。

二、服务追踪分析

微服务架构上通过业务来划分服务的,通过REST调用,对外暴露的一个接口,可能需要很多个服务协同才能完成这个接口功能,如果链路上任何一个服务出现问题或者网络超时,都会形成导致接口调用失败。随着业务的不断扩张,服务之间互相调用会越来越复杂。

11 SpringCloud中服务链路追踪:Spring Cloud Sleuth_第1张图片

随着服务的越来越多,对调用链的分析会越来越复杂。它们之间的调用关系也许如下:

11 SpringCloud中服务链路追踪:Spring Cloud Sleuth_第2张图片

三、术语

  • 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注解的过程图形化:

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

11 SpringCloud中服务链路追踪:Spring Cloud Sleuth_第3张图片

构建工程就不说了,可以看方志明的代码,我也是用他的。

启动工程,演示追踪

依次启动上面的三个工程,打开浏览器访问:http://localhost:9411/,会出现以下界面:

11 SpringCloud中服务链路追踪:Spring Cloud Sleuth_第4张图片

访问:http://localhost:8989/miya,浏览器出现:

i’m service-hi

这个没问题,但是之后他写的就有问题了

再打开http://localhost:9411/的界面,点击Dependencies,可以发现服务的依赖关系:

11 SpringCloud中服务链路追踪:Spring Cloud Sleuth_第5张图片

这个是不对的,我这试了好多次都不行,然后换成 http://localhost:8988/hi 才会出来

11 SpringCloud中服务链路追踪:Spring Cloud Sleuth_第6张图片

因为 ServiceHiApplication的"/hi"接口是入口


11 SpringCloud中服务链路追踪:Spring Cloud Sleuth_第7张图片

看看8989的“/miya”



又回到ServiceHiApplication的“/info”
这样循环调用一次,就会出现。


11 SpringCloud中服务链路追踪:Spring Cloud Sleuth_第8张图片

而 http://localhost:8989/miya 只调用了"/info",没有循环调用,zipkin不会收集,不知道这样理解对不对,先继续走,问题留着。
代码放在 https://github.com/lijiaccy/springcloud-study/tree/master/cloud-zipkin

你可能感兴趣的:(11 SpringCloud中服务链路追踪:Spring Cloud Sleuth)