SpringCloud(Greenwich版)Sleuth&Zipkin调用链路跟踪

推荐以下稳定版本号:

Spring Boot: 2.1.9.RELEASE

Spring Cloud: Greenwich.SR3

一、Sleuth简介

分布式服务跟踪--问题?

  随着业务的发展,分布式服务系统规模也会变得越来越庞大,各微服务间调用关系也变得越来越复杂。通常由一个客户端发起请求在后端系统中会经过多个不同的微服务调用来协同产生最后的请求结果,在复杂的微服务系统架构中,几乎每一个前端请求都会形成一条复杂的分布式服务调用链路,在每条链路中任何一个依赖服务出现延迟过高或错误的时候都有可能引起请求最后的失败。这时候,对于每个请求,全链路调用的跟踪就会变的越来越重要,通过实现对请求调用的跟踪可以帮助我们快速发现错误根源以及监控分析每条请求链路上的性能瓶颈等。

是什么?

  针对上述问题,Spring Cloud Sleuth 为 Spring Cloud 提供了一套完整的服务跟踪的解决方案,在分布式系统中提供追踪解决方案并且兼容支持了 Zipkin。

下面是 Spring Cloud 官网中一张完整的调用链路概念图:

初次看这张图都会是懵圈的状态,不过不要紧,你只需要了解其中 Trace 与 Span 的含义即可:

Trace:是指我们从服务开始到服务执行的终点的一次完整的请求 (request) 与响应 (response),存在唯一标识。

Span:是指调用链路的来源,在一次完整的追踪 (trace) 过程中,每调用一个服务都会记录调用信息与响应时间。

得出结论:一次trace由若干个span构成,sleuth是用于调用链路追踪,通过sleuth我们可以轻易的追踪到trace经过了哪几个服务,每个服务花费的时间等。

 

二、Spring Cloud Sleuth与Zipkin整合

Zipkin简介

  Zipkin 是 Twitter 开源的分布式跟踪系统,基于 Google Dapper 的论文设计而来。它的主要功能是收集系统的时序数据,从而追踪微服务架构的系统延时等问题。Zipkin 还提供了一个非常友好的界面,来帮助分析追踪数据。

Sleuth之Zipkin搭建安装

1)下载Zipkin jar包

  Spring Cloud从Finchley版起已经不需要自己构建 Zipkin 项目工程了,只需要直接下载官网打好的 jar 包,通过 java -jar 的方式就能够启动 Zipkin 服务器。

下载地址:https://dl.bintray.com/openzipkin/maven/io/zipkin/java/zipkin-server/

2)运行Zipkin Server

  下载完成后,在自己 zipkin jar 包的目录,打开Win10的cmd命令窗口,输入 java -jar zipkin-server-2.12.9-exec.jar 命令即可运行 Zipkin 服务器:

这样我们的 Zipkin 服务器就安装完成了,与构建项目工程对比,是不是非常 EASY友情提示:通过 java -jar 启动服务你需要提前配置好 JAVA JDK 环境变量,否则是无法启动服务的。

3)测试

  浏览器访问http://localhost:9411/zipkin/,能够看到如下Zipkin Dashboard页面了,而9411是Zipkin的默认端口号,(就像tomcat默认端口号8080一样)

现在就算单击 Find Traces 按钮,也没有链路追踪的微服务数据。

 

添加链路追踪的微服务模块

  接下来将跟踪信息展现到 Zipkin Dashboard页面上,我们拿之前Eureka注册中心provider-service和Zuul实现微服务网关zuul-service这两个项目工程"开刀"。改造的两个项目工程依赖与配置都相同。

1)补充build.gradle项目依赖

compile group: 'org.springframework.cloud', name: 'spring-cloud-sleuth-zipkin'

2)补充application.yaml配置文件

spring:
  zipkin:
    base-url: http://localhost:9411
  sleuth:
    sampler:
      probability: 1.0 #100%采样率
  • spring.zipkin.base-url:指定 Zipkin 服务器地址

  • spring.sleuth.sampler.probability:指定链路追踪采样的请求百分比,默认值是0.1,即10%

3)测试

Zipkin 服务器上面已经启动完成了。

Step1:运行 eureka-server 启动类,端口为8761

Step2:运行 provider-service 启动类,端口为8081

Step3:运行 zuul-service 启动类,端口为8080

Step4:先访问http://localhost:8761/,注册到的服务如下图:

Step5:多次访问通过Zuul转发http://localhost:8080/provider-service/client/info?access-token=wessonshin请求,由于zuul-service工程之前写过token身份验证,需要带access-token参数才能够访问成功:

  • hello, service provider port is from:8081

Step6:然后访问http://localhost:9411/zipkin/首页,单击 Find Traces 按钮,就能够看到 Zipkin 已经获取到的调用链路跟踪信息如下:

 

接着可以单击其中的一个微服务请求,查看该请求的详细数据,其中包括关注的请求消耗时间等:

此外,在 Zipkin Dashboard 界面中还可以通过 Dependencies 标签查看服务请求中各个微服务之间的依赖关系:

 

 
posted @ 2020-03-25 22:00  wessonshin  阅读(617)  评论(0编辑  收藏  举报