SpringCloud系列:利用SpringCloud Sleuth和Zipkin实现分布式服务调用链跟踪(一)

一、概述

在单体应用时代,接口缓慢能够被迅速定位和发现,而随着分布式微服务的流行,服务之间的调用关系越来越复杂,错中复杂的调用关系使得我们想找到某一个接口的效率缓慢变得非常困难,而分布式服务调用跟踪组件就解决了这个 问题。Sleuth是SprinCloud在分布式系统中提供追踪解决方案,zipkin是基于Google Dapper的分布式链路调用监控系统。先介绍下有关的专业术语,

  • Span:基本工作单元,例如,在一个新建的span中发送一个RPC等同于发送一个回应请求给RPC,span通过一个64位ID唯一标识,trace以另一个64位ID表示,span还有其他数据信息,比如摘要、时间戳事件、关键值注释(tags)、span的ID、以及进度ID(通常是IP地址) 
  • 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时间戳                     便可得到客户端从服务端获取回复的所有所需时间

二、功能开发实现

1.创建zipkin-server服务

     zipkin-server主要作用是使用ZipkinServer 的功能,收集调用数据链,并提供展示页面供用户使用。创建普通的SpringBoot项目zipkin-server,在pom.xml文件中增加如下依赖

<dependencies> <dependency> <groupId>io.zipkin.java</groupId> <artifactId>zipkin-server</artifactId> </dependency> <dependency> <groupId>io.zipkin.java</groupId> <artifactId>zipkin-autoconfigure-ui</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>

在ZipKinServerApplication主方法上添加@EnableZipkinServer注解,启用ZipkinServer功能。

@EnableZipkinServer @SpringBootApplication public class ZipkinServerApplication {

public static void main(String[] args) { SpringApplication.run(ZipkinServerApplication.class, args); } }

修改配置文件

spring.application.name=zipkin-server server.port=9107

启动服务,可以看到链路监控页面,此时没有收集到任何链路调用记录。

2.给原先服务增加链路追踪支持

   给eureka-provider、eureka-consumer、gateway三个服务增加如下依赖

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

该依赖内部包含了两个依赖,等于同时引入了spring-cloud-starter-sleuthspring-cloud-sleuth-zipkin两个依赖。

修改配置文件

#配置zipkin #指定zipkin的服务端,用于发送链路调用报告 spring.zipkin.base-url=http://10.17.5.50:9107

采样率,值为[0,1]之间的任意实数,这里代表100%采集报告。

spring.sleuth.sampler.percentage=1

重新部署启动服务,调用zuul接口,观察zipkin-server页面,生成调用链路

三、小结

   本文还只是基本的链路分析,如果生产上使用,还需要把监控内容持久化、把监控内容发送从http模式切换到MQ等改造,这些内容下次再详细介绍。

   码云地址:https://gitee.com/gengkangkang/springcloud.git

    github地址:https://github.com/gengkangkang/springcloud.git

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

Spring Cloud 微服务开发指南

如同SpringBoot在JavaWeb开发领域中的统治地位,SpringCloud在Java微服务应用开发领域中同样处于垄断地位。软件系统从单体升级到微服务架构,随之会出现各种分布式系统所特有的问题,包括服务注册发现、认证授权、限流熔断、调用追踪等。SpringCloud提供了各种组件来解决这些问题,本文将通过升级改造一个单体AP

APM监控

一,基础知识储备分布式跟踪的目标一个分布式系统由若干分布式服务构成,每一个请求会经过多个业务系统并留下足迹,但是这些分散的数据对于问题排查,或是流程优化都很有限,要能做到追踪每个请求的完整链路调用,收集链路调用上每个服务的性能数据,计算性能数据和比对性能指标(SLA),甚至能够再反馈到服务治理中,那么这就是分布式跟踪的目标。分布式跟踪的目的

Spring Boot + Spring Cloud 构建微服务系统(八):分布式链路追踪(Sleuth、Zipkin)

技术背景在微服务架构中,随着业务发展,系统拆分导致系统调用链路愈发复杂,一个看似简单的前端请求可能最终需要调用很多次后端服务才能完成,那么当整个请求出现问题时,我们很难得知到底是哪个服务出了问题导致的,这时就需要解决一个问题,如何快速定位服务故障点,于是,分布式系统调用链追踪技术就此诞生了。ZipKinZipkin是一个