SpringCloud系列十:使用zipkin进行服务链路追踪

一. 为什么要进行链路追踪?

微服务架构是一种分布式架构,微服务系统按照业务划分服务单元,一个微服务往往会有很多个服务单元,一个请求往往会有很多个单元参与,一旦请求出现异常,想要去定位问题点真心不容易,因此需要有个东西去跟踪请求链路,记录一个请求都调用了哪些服务单元,调用顺序是怎么样的以及在各个服务单元处理的时间长短。常见的服务链路追踪组件有google的dapper、twitter的zipkin、阿里的鹰眼等,它们都是出众的开源链路追踪组件。

二.Zipkin介绍

spring cloud 有自己的组件来集成这些开源组件,它就是spring cloud sleuth,它可以方便的整合zipkin进行服务链路追踪,它为服务链路追踪提供了一套完整的解决方案。

zipkin分服务端和客户端。客户端就是我们的服务单元,用来发送链路信息到服务端;服务端用来接收客户端发送来的链路信息,并进行处理,它包括4个部分:

1.Collector组件:用来接收客户端发送的链路信息然后整理成zipkin能处理的格式,供后续存储或向外部提供查询使用。

2.Storage组件:对链路信息进行保存,默认存储在内存,通过配置还可以保存到mysql等地方。

3.Restful API组件:对其他服务单元提供api接口进行查询链路信息。

4.Web UI组件:调用API 组件的接口并将信息显示到web 画面。

 

三. 项目架构

节点

服务

服务名

启动顺序

192.168.68.128:911

eureka注册中心

eureka-center

1

localhost:5200

链路追踪服务

zipkin-service

2

localhost:2221

服务提供者1:cart-service

cart-service

3

localhost:2222

服务提供者2:cart-service

cart-service

4

localhost:9999

服务消费者

cart-client

5

localhost:1111

网关服务

cartGatewayServ

6

顺序启动后,注册中心如图所示:

接下来我们来看具体代码实现。

 

四.Zipkin Server端代码实现

1.搭建项目,代码目录结构如下:

 

2.Pom文件中主要是要引入如下三个依赖:

        <!-- 引入eureka 客户端依赖 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>
        <!-- 引入zipkin-server依赖,提供server端功能 -->
        <dependency>
            <groupId>io.zipkin.java</groupId>
            <artifactId>zipkin-server</artifactId>
        </dependency>
        <!-- 引入zipkin-autoconfigure-ui依赖,用来提供zipkin web ui组件的功能,方便查看相关信息 -->
        <dependency>
            <groupId>io.zipkin.java</groupId>
            <artifactId>zipkin-autoconfigure-ui</artifactId>
        </dependency>

3.新建启动类,如图所示:

最主要是应用到了@EnableZipkinServer注解,用于开启Zipkin Server功能。

4. 新建配置文件,如图所示:

要向eureka注册中心注册自己。

 

五.Zipkin Client端代码实现

客户端的实现非常简单,我们只要在前面已经搭建的微服务上稍作改动即可。

1.引入依赖:

<!-- 引入zipkin 依赖 ,提供zipkin客户端的功能 -->

        <dependency>

            <groupId>org.springframework.cloud</groupId>

            <artifactId>spring-cloud-starter-zipkin</artifactId>

        </dependency>

2. 修改配置文件,追加两项配置

#指定zipkin服务端的url

spring.zipkin.base-url=http://localhost:5200

#设定样本收集的比率为100%

spring.sleuth.sampler.percentage=1.0

由于分布式系统的请求量一般比较大,不可能把所有的请求链路进行收集整理,因此sleuth采用抽样收集的方式,设定一个抽样百分比。在开发阶段,我们一般设定百分比为100%也就是1。

 

六.执行测试

按照项目架构列出的顺序依次启动服务。主要要先访问一下相关的微服务,链路追踪界面才能看得到。我们先通过服务消费者访问服务【http://localhost:9999/client/list.do】,再通过网关访问服务【http://localhost:1111/cart-service/flow/cart/list.do?token=aa】,当然了,随便你怎么访问了,接下来我们可以看到链路追踪的界面:

选择cartgatewayserv,再点击Find Traces按钮,可以追踪访问链路

点击进去,能看到请求都经历了哪些服务节点。再点相关link,可以查看调用顺序,并且还能看到在各个服务节点的处理的时间长度。

切换到依赖画面,能查看服务节点的依赖关系

好了,就介绍到这里,如果觉得对您有帮助,请点个赞吧!

猜你喜欢

转载自blog.csdn.net/wx5040257/article/details/108783975