springcloudh版sleuth+zipkin服务链路监控与追踪(代码片段)

小毕超 小毕超     2023-03-01     751

关键词:

一、分布式链路监控与追踪

上篇文章中我们讲解了SpringCloud Stream 消息驱动,本篇文章我们介绍喜爱Sleuth+Zipkin的服务链路监控与追踪。

上篇文章地址:https://blog.csdn.net/qq_43692950/article/details/122026591

在微服务系统中,随着业务的发展,系统会变得越来越大,那么各个服务之间的调用关系也就变得越来越复杂。一个 HTTP 请求会调用多个不同的微服务来处理返回最后的结果,在这个调用过程中,可能会因为某个服务出现网络延迟过高或发送错误导致请求失败,这个时候,对请求调用的监控就显得尤为重要了。Spring Cloud Sleuth 提供了分布式服务链路监控的解决方案。

Zipkin 是一个开放源代码分布式的跟踪系统,由Twitter公司开源,它致力于收集服务的定时数据,以解决微服务架构中的延迟问题,包括数据的收集、存储、查找和展现。每个服务向zipkin报告计时数据,例如用户每次请求服务的处理时间等,可方便的监测系统中存在的瓶颈。zipkin会根据调用关系通过Zipkin UI生成依赖关系图。

Spring Cloud Sleuth为服务之间调用提供链路追踪。通过Sleuth可以很清楚的了解到一个服务请求经过了哪些服务,每个服务处理花费了多长。从而让我们可以很方便的理清各微服务间的调用关系。此外Sleuth可以帮助我们:

  • 耗时分析: 通过Sleuth可以很方便的了解到每个采样请求的耗时,从而分析出哪些服务调用比较耗时;

  • 视化错误: 对于程序未捕捉的异常,可以通过集成Zipkin服务界面上看到;

  • 链路优化: 对于调用比较频繁的服务,可以针对这些服务实施一些优化措施。

  • Spring Cloud Sleuth可以结合Zipkin,将信息发送到Zipkin,利用Zipkin的存储来存储信息,利用Zipkin Ui来展示数据。

二、搭建Zipkin服务追踪系统

官方已经提供了提供了编译好的 jar 包,可以在官网下载:

https://zipkin.io/pages/quickstart.html

启动:
默认端口号; 9411:

java –jar zipkin.jar

打开浏览器输入:

http://localhost:9411

三、SpringCloud 加入追踪

在springcloud中加入Zipkin服务追踪是非常简单的。在服务的提供者个消费者加入下面配置。

在pom文件中引入依赖:

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

修改配制文件:

spring: 
  zipkin: 
    base-url: http://192.168.2.126:9411/
  sleuth: 
    sampler: 
      probability: 1.0  #代表所有信息,都收集

下面使用RestTemplate或Feign 调用服务的时候,会自动加入zipkin的追踪。
可以在上面那个网站看到服务调用的详情:

http://localhost:9411

四、持久化日志

上面的日志是存在内存中的,如果关闭zipkin,日志就消失了,但zipkin提供了持久化方案,存在es或mysql中,当然这里存在es中比较合适,效率也比较高。

存在es中的配置也很简单,只需启动时指定es地址。
启动zipkin:

java -jar zipkin-server-2.11.8-exec.jar --STORAGE_TYPE=elasticsearch --ES_HOSTS=http://127.0.0.1:9200

然后访问服务产生一些日志:

使用kibana查看ES中的日志:

GET zipkin:span-2020-08-06/_search



喜欢的小伙伴可以关注我的个人微信公众号,获取更多学习资料!

springcloudh版stream消息驱动讲解(代码片段)

一、SpringCloudStream上篇文章,我们讲解了config+bus实现所有服务配制自动刷新的功能,本篇文章继续讲解下消息驱动Stream上篇文章地址:https://blog.csdn.net/qq_43692950/article/details/122025347官方定义SpringCloudStream是一个构建... 查看详情

springcloudh版使用zookeeper作为注册中心(代码片段)

一、zookeeper作为注册中心eureka现在已经不更新,如果再继续使用,出现重大BUG就是一个棘手的事情了,当然现在已经推出了更为优秀的nacos作为注册中心,但是zookeeper也是一种备选方案嘛。上一篇文章我们讲解了eu... 查看详情

springcloudh版config+bus实现全局配制刷新(代码片段)

一、SpringcloudBus在上篇文章中我们介绍了Springcloudconfig的使用,但是应该可以发现一个问题,就是我们在修改完git中的配制后,让每个服务生效,需要按个调用刷新接口,如果服务非常多的时候,岂不是非... 查看详情

springcloudh版gateway网关路由讲解(代码片段)

一、GateWay网关在上篇文章中我们介绍了,hystrix的使用,本篇文章我们继续探索,SpringcloudGateWay网关:上篇文章地址:https://blog.csdn.net/qq_43692950/article/details/121998205Gateway是在Spring生态系统之上构建的API网关服务... 查看详情

springcloudh版gateway网关服务降级(代码片段)

一、GateWay网关服务降级在上篇文章中我们讲到了GateWay网关的基本使用和路由的转发,今天一起学习下,gateway的服务降级。上篇文章地址:https://blog.csdn.net/qq_43692950/article/details/122023067但是可能会发现一个问题,... 查看详情

springcloudh版openfeign客户端讲解(代码片段)

一、OpenFeign客户端Feign是一个声明式客户端调用。它的使用方法是定义一个服务接口然后在上面添加SpringMVC的注解即可。Feign也支持可拔插式的编码器和解码器。SpringCloud对Feign进行了封装,使其支持了SpringMVC标准注解和HttpMess... 查看详情

springcloudh版eureka使用及集群讲解(代码片段)

一、SpringCloudSpringCloud也是一个我们现在基本开发必备的框架之一了,他提供了整个微服务的解决方案,早在很早以前我就写了详细的SpringCloud的博客,但一直没写系列的教程,现在就准备讲解下SpringCloud全家桶的... 查看详情

springcloudh版使用consul作为注册中心(代码片段)

一、consul作为注册中心eureka现在已经不更新,上篇博客中我们讲解了zookeeper作为注册中心的解决方案,除了zk还有consul也可以作为注册中心来使用,并且consul所支持的功能是多余eureka和zk的,可以说如果没有nacos的... 查看详情

springcloudh版config配制中心讲解(代码片段)

一、SpringCloudConfig上篇文章中我们介绍了SpringcloudGateWay网关的使用,包括路由转发、服务降级、限流等,所有的配制都配制在了项目中的application.yml文件中,如果其中修改配制文件就要进行重启,如果生产获取怎... 查看详情

springcloudh版ribbon使用讲解及自定义负载算法(代码片段)

一、RibbonSpringCloudRibbon是基于NetflixRibbon实现的一套客户端负载均衡的工具。简单的说,Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法和服务调用。Ribbon客户端组件提供一系列完善的配置项如连... 查看详情

springcloudh版hystrix介绍及服务降级讲解(代码片段)

一、Hystrix前面我们讲解了OpenFeign的使用和注意点,再上节中我们提到了服务降级,服务降级也是一种服务保护的策略,今天我们来讲解下Hystrix服务保护工具,虽然官方已经声明Hystrix已经不再更新,但Hystrix的... 查看详情

springcloudh版hystrix服务熔断限流讲解(代码片段)

一、Hystrix上一篇文章中我们对Hystrix进行了介绍,及讲解了Hystrix的服务降级的使用,本篇我们继续讲解Hystrix的服务熔断限流。上篇博客地址:https://blog.csdn.net/qq_43692950/article/details/121996806本篇我们主要讲解Hystrix的服... 查看详情

springcloudh版gateway过滤器讲解及使用guava统一限流处理。(代码片段)

一、GateWay在上篇文章我们讲解了GateWay的基本使用和路由的转发,在GateWay中还有一个重要的知识点就是过滤器,基于过滤器我们可以限制请求的规范,比如过滤请求中token过期的请求,不做转发,或者在网关处... 查看详情

springcloudalibaba(15)---sleuth+zipkin(代码片段)

SpringCloudAlibaba整合Sleuth+Zipkin有关Sleuth之前有写过两篇文章SpringCloudAlibaba(13)---Sleuth概述SpringCloudAlibaba(14)---SpringCloudAlibaba整合Sleuth上篇文章我们通过打印日志的方式,看到一个请求的完整链路。但是当微服务越来越多日志文件也会... 查看详情

springcloud学习之sleuth+zipkin

一、什么是Sleuth  为服务之间调用提供链路追踪。通过Sleuth可以很清楚的了解到一个服务请求经过了哪些服务,每个服务处理花费了多长。从而让我们可以很方便的理清各微服务间的调用关系。二、Sleuth作用  2.1:耗时分析... 查看详情

引入sleuth依赖导致websocket发送stomp消息失败(代码片段)

引入sleuth依赖websocket发送STOMP消息失败添加了sleuth和zipkin之后,报下面这个错误,这个问题找了好久终于解决需要添加sleuth配置通过以下方式禁用侦探的websocket消息传递支持spring.sleuth.integration.websockets.enabled=false具体参... 查看详情

整合sleuth(代码片段)

Sleuth是springcloud分布式跟踪解决方案。Sleuth术语:跨度(span ):Sleuth的基本工作单元,他用一个64位的id唯一标识。出ID外,span还包含其他的数据,如描述,时间戳事件,键值对注解等,spanidspan父ID等。trace跟踪:一组span组... 查看详情

引入sleuth依赖导致websocket发送stomp消息失败(代码片段)

引入sleuth依赖websocket发送STOMP消息失败添加了sleuth和zipkin之后,报下面这个错误,这个问题找了好久终于解决需要添加sleuth配置通过以下方式禁用侦探的websocket消息传递支持spring.sleuth.integration.websockets.enabled=false具体参... 查看详情