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

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

114522_JZTC_2376417.png

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页面,生成调用链路

154221_HsOp_2376417.png

154311_Rr15_2376417.png

154358_EYcu_2376417.png

三、小结

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

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

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

 

 

 

 

 

转载于:https://my.oschina.net/gengkangkang/blog/1590478

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值