这篇文章主要讲述服务追踪组件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调用,对外暴露的一个接口,可能需要很多个服务协同才能完成这个接口功能,如果链路上任何一个服务出现问题或者网络超时,都会形成导致接口调用失败。随着业务的不断扩张,服务之间互相调用会越来越复杂。

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

三、术语

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

四、构建工程

基本知识讲解完毕,下面我们来实战,本文的案例主要有三个工程组成:一个server-zipkin,它的主要作用使用ZipkinServer 的功能,收集调用数据,并展示;一个service-hi,对外暴露hi接口;一个service-miya,对外暴露miya接口;这两个service可以相互调用;并且只有调用了,server-zipkin才会收集数据的,这就是为什么叫服务追踪了。

4.1 构建server-zipkin

建一个spring-boot工程取名为server-zipkin,在其pom引入依赖:

<dependency><groupId>io.zipkin.java</groupId><artifactId>zipkin-server</artifactId>
</dependency><dependency><groupId>io.zipkin.java</groupId><artifactId>zipkin-autoconfigure-ui</artifactId>
</dependency>

在其程序入口类, 加上注解@EnableZipkinServer,开启ZipkinServer的功能:

@SpringBootApplication
@EnableZipkinServer
public class ServerZipkinApplication {public static void main(String[] args) {SpringApplication.run(ServerZipkinApplication.class, args);}
}

在配置文件application.yml指定服务端口为:

server.port=9411

4.2 创建service-hi

在其pom引入起步依赖spring-cloud-starter-zipkin,代码如下:

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

在其配置文件application.yml指定zipkin server的地址,头通过配置“spring.zipkin.base-url”指定:

server.port=8988
spring.zipkin.base-url=http://localhost:9411
spring.application.name=service-hi

通过引入spring-cloud-starter-zipkin依赖和设置spring.zipkin.base-url就可以了。

对外暴露接口:

@RequestMapping("/hi")public String callHome(){LOG.log(Level.INFO, "calling trace service-hi  ");return restTemplate.getForObject("http://localhost:8989/miya", String.class);}@RequestMapping("/info")public String info(){LOG.log(Level.INFO, "calling trace service-hi ");return "i'm service-hi";}

4.3 创建service-miya

创建过程痛service-hi,引入相同的依赖,配置下spring.zipkin.base-url。

对外暴露接口:

@RequestMapping("/hi")public String home(){LOG.log(Level.INFO, "hi is being called");return "hi i'm miya!";}@RequestMapping("/miya")public String info(){LOG.log(Level.INFO, "info is being called");return restTemplate.getForObject("http://localhost:8988/info",String.class);}

4.4 启动工程,演示追踪

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

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

i’m service-hi

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

点击find traces,可以看到具体服务相互调用的数据:

本文源码下载:

https://github.com/forezp/SpringCloudLearning/tree/master/chapter9

五、参考资料

https://github.com/spring-cloud/spring-cloud-sleuth

https://yq.aliyun.com/articles/60165

http://blog.csdn.net/u010257992/article/details/52474639

欢迎关注我的公众号:

Spring Cloud第九篇:链路追踪Sleuth相关推荐

  1. 关于Spring Cloud + Dubbo的链路追踪及traceId方案及思考(1)

    关于Spring Cloud + Dubbo的链路追踪及traceId方案及思考(1) 背景 实现方案 1. SkyWalking作为项目中的APM工具 1.1 SkyWalking服务端搭建 1.2 ...

  2. Spring Cloud Alibaba 高级特性 基于 Sleuth+Zipkin 实施链路跟踪体系

    介绍微服务链路追踪的原理: 讲解基于 Spring Cloud Sleuth 实现链路追踪: 构建 Zipkin Server 实现链路追踪的可视化管理. 下面咱们先来介绍什么是微服务链路追踪. 微服 ...

  3. 链路追踪_springcloud-第九回 链路追踪Sleuth

    背景 微服务架构下,几乎每一个前端请求都会形成一个复杂的分布式服务调用链路,在每条链路中任何一个依赖服务出现延迟超时或者错误都有可能引起整个请求最后的失败,为了快速定位和解决问题,需要追踪服务请求序列 ...

  4. 利用Zipkin对Spring Cloud应用进行服务追踪分析

    设想这么一种情况,如果你的微服务数量逐渐增大,服务间的依赖关系越来越复杂,怎么分析它们之间的调用关系及相互的影响? 服务追踪分析 一个由微服务构成的应用系统通过服务来划分问题域,通过REST请求服务A ...

  5. Java学习笔记分享之Spring Cloud Netflix篇(上)

    Spring Cloud Netflix Spring Cloud 是什么 [百度百科]Spring Cloud是一系列框架的有序集合.它利用Spring Boot的开发便利性巧妙地简化了分布式系统基 ...

  6. 07-搭建微服务-链路追踪Sleuth

    1.为什么使用链路追踪? 在微服务中,随着服务越来越多,对调用链的分析越来越复杂. 出现问题: 1.微服务之间的调用错综复杂,用户发送的请求经历哪些服务,调用链不清楚,没有一个自动化的工具类来维护调用 ...

  7. Spring Cloud第二篇:服务消费者RestTemplate+Ribbon

    在上一篇文章,讲了服务的注册和发现.在微服务架构中,业务都会被拆分成一个独立的服务,服务与服务的通讯是基于http restful的.Spring cloud有两种服务调用方式,一种是ribbon+r ...

  8. Spring Cloud第一篇:服务注册与发现Eureka

    一.spring cloud简介 spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选.分布式会话等等.它运 ...

  9. springclound 链路追踪sleuth

    1.pom引入 spring-clound-starter-sleuth 假如不使用openfeign使用dubbo,需要增加最后一个brave-insxxxx-dubbo来链路追踪 再增加一个dub ...

最新文章

  1. 财务需要学python-财务人要学Python吗?
  2. 06python 之基本数据类型
  3. java电影票选座_jQuery实现电影票选座效果手机端代码
  4. 固定编辑框输入上限和下限_两种截然不同的汉字输入场景
  5. mysql命令的依赖库_3.EZMM工程(常用shell命令,及需要用到的基本依赖库)
  6. 逻辑运算符 用法解释
  7. PHP正则怎样词语过滤,如何用正则替换敏感词?敏感词过滤? - SegmentFault
  8. 贪心 C - Kayaking
  9. JAVA医院预约挂号系统毕业设计 开题报告
  10. 百度成小满运维面试题
  11. Atitit 手机号码选号 规范 流程 attilax总结 v2 r99.docx
  12. 2020Web应用防火墙 (WAF)榜单TOP30
  13. ccf计算机认证考试题集,【计算机本科补全计划】CCF计算机职业资格认证 2017-03 试题初试...
  14. 介绍一款数据库管理软件
  15. uboot什么意思(uboot fastboot)
  16. WinForm的控件二次开发
  17. Java实现从Excel文件转换成XML文件(一)
  18. label标签的使用
  19. 项目经理常用的几大项目管理工具盘点
  20. 读《道德经》:混职场的你别不服,牛人与普通人,就差这5点!

热门文章

  1. 使用Python命令创建jenkins的job
  2. xx.xib: error: Illegal Configuration: Safe Area Layout Guide before iOS 9.0报错问题解决
  3. Tomcat在Linux上的安装与配置
  4. nodejs安装、配置及开发工具
  5. 运用比较纯的CSS打造很Web2.0的按钮
  6. 全面解读WEB 2.0
  7. 技术图文:如何利用 C# 实现 误差反向传播 学习规则?
  8. 如何利用BP网络进行神经网络变量筛选
  9. 属于python文件的操作有_Python的文件操作
  10. 昇思MindSpore1.6发布 AI开发者体验再升级