spring cloud 入门系列八:使用spring cloud sleuth整合zipkin进行服务链路追踪[通俗易懂]

好久没有写博客了,主要是最近有些忙,今天忙里偷闲来一篇。我是华丽的分割线微服务架构是一种分布式架构,微服务系统按照业务划分服务单元,一个微服务往往会有很多个服务单元,一个请求往往会有很多个单元参与

大家好,又见面了,我是全栈君。

好久没有写博客了,主要是最近有些忙,今天忙里偷闲来一篇。

=======我是华丽的分割线==========

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

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

今天的主题就是如何使用spring cloud sleuth整合zipkin进行服务链路追踪。本博客将围绕下面的线索进行展开:

  1. Server端代码实现
  2. Client端代码实现
  3. 执行测试

 由上面的线索可以发现,zipkin分服务端和客户端。

客户端就是我们的服务单元,用来发送链路信息到服务端;

服务端用来接收客户端发送来的链路信息,并进行处理,它包括4个部分:

  • Collector组件:用来接收客户端发送的链路信息然后整理成zipkin能处理的格式,供后续存储或向外部提供查询使用。
  • Storage组件:对链路信息进行保存,默认存储在内存,通过配置还可以保存到mysql等地方。
  • Restful API组件:对其他服务单元提供api接口进行查询链路信息。
  • Web UI组件:调用API 组件的接口并将信息显示到web 画面。

废话不多说,直接上代码。

一、Server端代码实现

 先给出代码结构:

spring cloud 入门系列八:使用spring cloud sleuth整合zipkin进行服务链路追踪[通俗易懂]

 

  结构比较简单,搭建过程如下:

  1. 新建maven工程sleuth-zipkin
  2. 修改pom文件
    <project xmlns="http://maven.apache.org/POM/4.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>com.sam</groupId>
        <artifactId>sleuth-zipkin</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>1.5.1.RELEASE</version>
        </parent>
    
        <properties>
            <javaVersion>1.8</javaVersion>
        </properties>
        <!-- 使用dependencyManagement进行版本管理 -->
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>Camden.SR6</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
    
        </dependencyManagement>
    
        <dependencies>
            <!-- 引入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>
    
            <!-- 引入eureka依赖 -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-eureka</artifactId>
            </dependency>
            
        </dependencies>
    </project>

     

  3. 新建启动类
    /**
     * @EnableZipkinServer
     * 
     * 用于开启Zipkin Server功能
     *
     */
    @EnableZipkinServer
    @SpringBootApplication
    @EnableDiscoveryClient
    public class SleuthZipkinApp {
    
        public static void main(String[] args) {
            SpringApplication.run(SleuthZipkinApp.class, args);
        }
    
    }

     

  4. 新建配置文件
    server.port=9411
    spring.application.name=sleuth-zipkin
    #需要使用到eureka服务注册中心 eureka.client.serviceUrl.defaultZone
    =http://localhost:1111/eureka

二、Client端代码实现

这里我们准备使用前面的随笔中已经实现好的微服务(网关服务api-gateway消费者hello-consumer和生产者hello-server,可以点击链接查看搭建过程,这里就不详细描述了)。在这几个微服务中都做如下修改:

  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:9411
    #设定样本收集的比率为100%
    spring.sleuth.sampler.percentage=1.0

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

三、执行测试

  1. 依次启动微服务:服务注册中心eureka、zipkin服务端sleuth-zipkin、网关服务api-gateway、消费者hello-consumer和生产者hello-server
  2. 访问http://localhost:1111/,确认4个微服务已经成功注册到了服务注册中心spring cloud 入门系列八:使用spring cloud sleuth整合zipkin进行服务链路追踪[通俗易懂]

     

  3. 访问http://localhost:5555/hello-consumer/hello-consumer?accessToken=111,通过zuul 网关进行访问,spring cloud 入门系列八:使用spring cloud sleuth整合zipkin进行服务链路追踪[通俗易懂]

    查看api-gateway控制台:

    2018-07-19 18:02:34.999  INFO [api-gateway,4c384ab23da1ae35,4c384ab23da1ae35,true] 9296 --- [nio-5555-exec-3] com.sam.filter.AccessFilter              : send GET request to http://localhost:5555/hello-consumer/hello-consumer
    2018-07-19 18:02:45.088  INFO [api-gateway,,,] 9296 --- [trap-executor-0] c.n.d.s.r.aws.ConfigClusterResolver      : Resolving eureka endpoints via configuration

    请看红字部分,有4部分,以逗号分隔。第一部分是服务名;第二部分是TranceId,每次请求都会有唯一的tranceId;第三部分是spanId,每个工作单元发送一次请求就会产生一个spanId,每个请求会产生一个tranceId和多个spanId,根据tranceId和spanId就能分析出一个完整的请求都经历了哪些服务单元;第四部分是boolean型的,用来标记是否需要将该请求链路进行抽样收集发送到zipkin等进行整理。

  4. 访问zipkin服务端http://localhost:9411/,查看UI页面spring cloud 入门系列八:使用spring cloud sleuth整合zipkin进行服务链路追踪[通俗易懂]

    选择api-gateway,然后点击 “Find Trances”spring cloud 入门系列八:使用spring cloud sleuth整合zipkin进行服务链路追踪[通俗易懂]

    能看到请求都经历了哪些服务节点。再点相关link,可以查看调用顺序,并且还能看到在各个服务节点的处理的时间长度。spring cloud 入门系列八:使用spring cloud sleuth整合zipkin进行服务链路追踪[通俗易懂]

    切换到依赖画面,能查看服务节点的依赖关系spring cloud 入门系列八:使用spring cloud sleuth整合zipkin进行服务链路追踪[通俗易懂]

     

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/120893.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 测试音视频地址(音视频性能测试)

    在线视频地址https://media.w3.org/2010/05/sintel/trailer.mp4http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4http://vjs.zencdn.net/v/oceans.mp4https://media.w3.org/2010/05/sintel/trailer.mp4http://…

    2022年4月13日
    68
  • python爬虫实时转发文章新闻;微信机器人使用;「建议收藏」

    python爬虫实时转发文章新闻;微信机器人使用;「建议收藏」前言:当前时间2022-4-24已经有五个月没水文章了!personally技术不增反退,咸扯蛋!今天搞个好玩的,用“鬼手”搞的免费版的微信pc端机器人+爬虫用来实时转发文章或新闻啥的!感谢“鬼手”免费分享的源码!(鄙人就单纯喜欢打感叹号!没其他意思!不是强调!)一、介绍“鬼手”的pc端微信使用先甩github链接:https://github.com/cixingguangming55555/wechat-bot里面有使用教程,但为了方便和本着就是讲细的原则还是说说吧。1、下

    2022年6月22日
    55
  • Kafka入门经典教程_kafka菜鸟教程

    Kafka入门经典教程_kafka菜鸟教程转自:https://blog.csdn.net/yuan_xw/article/details/512109541Kafka入门教程1.1消息队列(MessageQueue)MessageQueue消息传送系统提供传送服务。消息传送依赖于大量支持组件,这些组件负责处理连接服务、消息的路由和传送、持久性、安全性以及日志记录。消息服务器可以使用一个或多个代理实例。J…

    2022年10月16日
    0
  • 使用python语言编写常见的文本分类算法

    使用python语言编写常见的文本分类算法    自然语言处理中一个很常见的操作就是文本分类,比如一组新闻文本,通过分类模型,将新闻文本分为政治、体育、军事、娱乐、财经等等几大类。那么分类第一步就是文本向量化,前一篇博客讲了一些,本文可以说是前文的实践版本。本文主要介绍一些常见的文本分类模型,说是介绍,其实主要以代码和结果为主,并不会详细的介绍每个算法的思想、原理、推导过程等,那样的话,估计可以写一个7、8篇的系列了,另外我也发现很…

    2022年6月6日
    32
  • native2ascii用法

    native2ascii用法背景:在做Java开发的时候,常常会出现一些乱码,或者无法正确识别或读取的文件,比如常见的validator验证用的消息资源(properties)文件就需要进行Unicode重新编码。原因是java默认的编码方式为Unicode,而我们的计算机系统编码常常是GBK等编码。需要将系统的编码转换为java正确识别的编码问题就解决了。 1、native2ascii简介:native2ascii是s…

    2022年9月12日
    0
  • Maven打包命令包括继承和依赖关系的打包命令

    Maven打包命令包括继承和依赖关系的打包命令上级cis-parent下级itw-api itw-app itw-domainapiappdomain都继承于cis-parent,在app里dependency了api,domain里dependency了apiapi打包方式为jar,app和domain为war包。打包过程:1先对api打包,并安装到maven库库,mvninstall;

    2022年5月25日
    62

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号