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

【spring cloud】spring cloud Sleuth 和Zipkin 进行分布式链路跟踪的更多相关文章

  1. 跟我学SpringCloud | 第十一篇:使用Spring Cloud Sleuth和Zipkin进行分布式链路跟踪

    SpringCloud系列教程 | 第十一篇:使用Spring Cloud Sleuth和Zipkin进行分布式链路跟踪 Springboot: 2.1.6.RELEASE SpringCloud: ...

  2. springcloud(十二):使用Spring Cloud Sleuth和Zipkin进行分布式链路跟踪

    随着业务发展,系统拆分导致系统调用链路愈发复杂一个前端请求可能最终需要调用很多次后端服务才能完成,当整个请求变慢或不可用时,我们是无法得知该请求是由某个或某些后端服务引起的,这时就需要解决如何快读定位 ...

  3. 使用Spring Cloud Sleuth和Zipkin进行分布式链路跟踪

    原文:http://www.cnblogs.com/ityouknow/p/8403388.html 随着业务发展,系统拆分导致系统调用链路愈发复杂一个前端请求可能最终需要调用很多次后端服务才能完成, ...

  4. spring cloud深入学习(十三)-----使用Spring Cloud Sleuth和Zipkin进行分布式链路跟踪

    随着业务发展,系统拆分导致系统调用链路愈发复杂一个前端请求可能最终需要调用很多次后端服务才能完成,当整个请求变慢或不可用时,我们是无法得知该请求是由某个或某些后端服务引起的,这时就需要解决如何快读定位 ...

  5. Spring Cloud(十二):分布式链路跟踪 Sleuth 与 Zipkin【Finchley 版】

    Spring Cloud(十二):分布式链路跟踪 Sleuth 与 Zipkin[Finchley 版]  发表于 2018-04-24 |  随着业务发展,系统拆分导致系统调用链路愈发复杂一个前端请 ...

  6. spring cloud 入门系列八:使用spring cloud sleuth整合zipkin进行服务链路追踪

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

  7. ⑦SpringCloud 实战:引入Sleuth组件,完善服务链路跟踪

    这是SpringCloud实战系列中第7篇文章,了解前面第两篇文章更有助于更好理解本文内容: ①SpringCloud 实战:引入Eureka组件,完善服务治理 ②SpringCloud 实战:引入F ...

  8. 个推基于 Zipkin 的分布式链路追踪实践

    作者:个推应用平台基础架构高级研发工程师 阿飞   01业务背景   随着微服务架构的流行,系统变得越来越复杂,单体的系统被拆成很多个模块,各个模块通过轻量级的通信协议进行通讯,相互协作,共同实现系统 ...

  9. 分布式链路跟踪系统架构SkyWalking和zipkin和pinpoint

    Net和Java基于zipkin的全链路追踪 https://www.cnblogs.com/zhangs1986/p/8966051.html 在各大厂分布式链路跟踪系统架构对比 中已经介绍了几大框 ...

随机推荐

  1. **后台怎么处理JSON数据中含有双引号?

    http://bbs.csdn.net/topics/390578406?page=1 注意是后台,不是用js另外我这个json是直接取得别人的传过来的字符串,不是我自己拼写的,所以我自己不能做到转义 ...

  2. 下载Eclipse

    工欲善其事必先利其器,我们学习Java首先要学会下载开发工具,Eclipse就是一个很好的Java语言开发工具,那么我们首先要知道怎么下载Eclipse.相信很多Java书籍都有下载Eclipse的教 ...

  3. AndroidStudio3.0到3.1遇到的坑

    原文:https://blog.csdn.net/qq_36676433/article/details/80361064 本以为3.0到3.1仅仅是界面的优化,万万没想到的是这个坑比起2.0到3.0 ...

  4. HTML5移动应用左右滑动touchmove touchmove touchend 实例

    也是刚开始接触移动前端,大虾别喷 <!DOCTYPE HTML> <html> <head> <meta name="viewport" ...

  5. IDEA简单部署MVC项目

    本文章主要参考七小栈主的文章,特此说明: 前提 在配置好JDK,配置好Maven,配置链接如下:如何配置Java环境,包括JDK,Maven等 建项目 IEDA中File->New->Pr ...

  6. linux 101 hacks 6history 及相关关键字

    如果你经常使用命令行,那么有效的使用命令历史机制将会使效率获得极大提升.事实上,一旦你掌握了我在下面给出的 15 个例子, 你就会发现使用命令行将更有乐趣 是吗?我学一学呢 技巧 50:使用 HIST ...

  7. 【BZOJ】1152: [CTSC2006]歌唱王国Singleland

    题解 读错题了,是最后留下一个牛人首长歌颂他,和其他人没有关系,t就相当于数据组数 结论题,具体可看 https://www.zhihu.com/question/59895916/answer/19 ...

  8. Django实战(12):增加目录页,设定统一布局

    针对上一节的新需求,界面设计师还为我们设计了一个新的界面,不仅仅是目录页,还包含了站点的整体风格,如下图: 感谢界面设计师为我们提供的“又黑又硬”的工具条,这个看起来真的很酷.下面,让我们来享用她的工 ...

  9. MapReduce的原理及执行过程

    MapReduce简介 MapReduce是一种分布式计算模型,是Google提出的,主要用于搜索领域,解决海量数据的计算问题. MR有两个阶段组成:Map和Reduce,用户只需实现map()和re ...

  10. IntelliJ IDEA 2017.2安装

    1.准备(终极版) 2.安装 3.破解 4.成功