zoukankan      html  css  js  c++  java
  • 【spring cloud】spring cloud Sleuth 和Zipkin 进行分布式链路跟踪

    spring cloud 分布式微服务架构下,所有请求都去找网关,对外返回也是统一的结果,或者成功,或者失败。

    但是如果失败,那分布式系统之间的服务调用可能非常复杂,那么要定位到发生错误的具体位置,就是一个比较麻烦的问题。

    所以定位故障点,就引入了spring cloud Sleuth【Sleuth是猎犬的意思】 和Zipkin 【zipkin是一款开源的分布式数据跟踪系统】。

    Spring Cloud Sleuth是对Zipkin的一个封装,对于Span、Trace等信息的生成、接入HTTP Request,以及向Zipkin Server发送采集信息等全部自动完成。

    最后,你可以在zipkin的UI上看到一个比较完善的追踪结果和分析。

    Zipkin提供了可插拔数据存储方式:In-Memory、MySql、Cassandra以及Elasticsearch。接下来的测试为方便直接采用In-Memory方式进行存储,生产推荐Elasticsearch。

    一 、下面开始spring cloud集成步骤

    【GitHub源码地址:https://github.com/AngelSXD/springcloud

    版本介绍:

    <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            <java.version>1.8</java.version>
            <spring-boot.version>2.0.4.RELEASE</spring-boot.version>
            <spring-cloud.version>Finchley.SR1</spring-cloud.version>
            <lcn.last.version>4.2.1</lcn.last.version>
        </properties>

    1.创建ms-sleuth-zipkin 子服务,添加pom.xml架包依赖【标红部分,你们可以不需要,我的demo里正好需要才加的】

    <!-- zipkin服务端 -->
            <dependency>
                <groupId>io.zipkin.java</groupId>
                <artifactId>zipkin-server</artifactId>
                <version>2.10.1</version>
                <!--排除-->
                <exclusions>
                    <exclusion>
                        <groupId>org.apache.logging.log4j</groupId>
                        <artifactId>log4j-slf4j-impl</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <!-- zipkin UI展示 -->
            <dependency>
                <groupId>io.zipkin.java</groupId>
                <artifactId>zipkin-autoconfigure-ui</artifactId>
                <version>2.10.1</version>
            </dependency>

    2.启动类加注解

    package com.swapping.springcloud.ms.sleuth.zipkin;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
    import zipkin.server.internal.EnableZipkinServer;
    
    //启用Zipkin服务
    @EnableZipkinServer
    
    @EnableEurekaClient
    @SpringBootApplication(scanBasePackages = {"com.swapping"})
    public class SpringcloudMsSleuthZipkinApp {
    
        public static void main(String[] args) {
            SpringApplication.run(SpringcloudMsSleuthZipkinApp.class, args);
        }
    }

    3.配置文件中配置基础的配置即可【如果启动zipkin之后,无法访问或者报错,参考:https://www.cnblogs.com/sxdcgaq8080/p/10007735.html

    spring.application.name=springcloud-ms-sleuth-zipkin
    server.port=8002
    eureka.client.service-url.defaultZone=http://127.0.0.1:8000/eureka/

    #zipkin启动报错无法访问的解决方法
    management.metrics.web.server.auto-time-requests=false

    4.然后依次启动eureka服务,和zipkin服务即可

    访问地址:【注意最后需要带上/】

    http://localhost:8002/zipkin/

    可以看到页面

    5.接着,就是需要在zipkin自己服务中,和各个需要开启链路跟踪的服务的配置文件中添加配置 ,并且添加pom依赖

    我是加载父级pom中,这样所有子module都可以用

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

    配置【注意,spring boot 1.X的采样率配置是spring.sleuth.sampler.percentage=1】

    【我在zipkin服务、ms-member服务、ms-gateway服务、ms-integral都做了添加】

    #在需要链路的服务  以及 zipkin服务添加配置
    spring.zipkin.base-url=http://localhost:8002
    #采集率
    spring.sleuth.sampler.probability=1.0

    关于采样率的解释:

    Spring Cloud Sleuth有一个Sampler策略,可以通过这个实现类来控制采样算法。采样器不会阻碍span相关id的产生,但是会对导出以及附加事件标签的相关操作造成影响。 Sleuth默认采样算法的实现是Reservoir sampling,具体的实现类是PercentageBasedSampler,默认的采样比例为: 0.1(即10%)。不过我们可以通过spring.sleuth.sampler.percentage来设置,所设置的值介于0.0到1.0之间,1.0则表示全部采集。

    但是如果是全部采集的话,存储的性能需要考虑一下。

    6.测试

    ms-member有一个save的接口,自己做了save操作,并且feign调用了ms-integral服务做了save操作。【并且在最终ms-member中返回结果之前,抛出一个除零异常】

    启动eureka

    启动网关ms-gateway

    启动ms-zipkin

    启动ms-member

    启动ms-integral

    那么请求的流程就是 网关(ms-gateway)---->ms-member--->ms-integral 【每一个结点采集到的信息会由Sleuth 发送给zipkin服务】

    访问地址:

    http://localhost:8001/v1/ms-member/member/save?auth=111

    访问接口完成后,访问zikpin的UI

    http://localhost:8002/zipkin/

    然后选择查看ms-gateway服务

     点击进去:

     从进入gateway开始看,也就是请求的第一步:

     

     

     同时还可以看到:

    点击依赖分析,还可以看到调用关系

    二、Zipkin集成elasticsearch

  • 相关阅读:
    链表和顺序表的区别
    MongoDB安装了以后,服务无法启动的问题
    retrying模块
    Scrapy 动态创建 Item
    pyhon把程序打包为whl
    记录有个关于使用matplotlib库绘图遇到的坑
    读取Polygon多边形的顶点坐标
    Scatter 散点图
    tick 能见度
    Annotation 标注
  • 原文地址:https://www.cnblogs.com/sxdcgaq8080/p/10008606.html
Copyright © 2011-2022 走看看