关键词:
[版权申明] 非商业目的注明出处可自由转载
出自:shusheng007
文章目录
前言
本文将介绍微服务架构中关于链路追踪相关组件Sleuth与Zipkin的在SpringCloud入门使用。
链路追踪
为什么要进行链路追踪啊?为什么它在微服务架构中突然显得那么重要,以前怎么不太受重视啊? 看看下面这个图,只有5个服务以及他们互相调用方式,这但凡某个调用出了问题:请求都经过哪几个服务啦?先过的你还是它啊?那个服务耗时太长拉?等等你是不是半天都理不清,那要是50个微服务呢?很明显,我们需要链路追踪。
理论
目前流行的分布式链路追踪实现方案都是基于Google发布的Dapper相关的论文的,你要是感兴趣可以去看一下Dapper论文,这是中文翻译版:Dapper论文翻译版。论文肯定是比较晦涩难懂拉,但你应该大体明白里面的一些关键概念,例如Trace,Span, Annotations, Sampling(采样率)等
假设现在调用链路是 A-B-C
- Trace
这一次调用是一个trace,以一个全局唯一的id来标识,这个就叫traceId
- Span
A-B就是一个Span,B-C也是一个Span。以一个唯一id来标识,叫spanId
- Annotations
链路的额外信息,例如 服务名称,Ip,调用起始结束时间等信息
- Sampling
采样率,在高并发下,你不可能采集每次调用的信息,所以可以100个调用采集1个。
SpringCloud的实现方案
在SpringCloud中我们可以采用Sleuth加Zipkin来实现全链路追踪,Sleuth负责采集链路信息,Zipkin负责处理展示这些信息。
Zipkin服务
因为要使用Zipkin服务,肯定的需要安装Zipkin的服务,我们以docker的形式安装,以mysql来存储链路信息。
下面是安装的docker-compose文件的一部分,完整部分可以在文章末尾的源码中找到。
...
# 数据库
ms_mariadb:
image: mariadb:10.6.5
container_name: ms_mariadb
ports:
- 3306:3306
volumes:
- ~/software/database/ms_mariadb/config:/etc/mysql/conf.d
- ~/software/database/ms_mariadb/data:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=root
networks:
ms_network:
ipv4_address: 172.171.1.11
# 链路追踪
ms_zipkin:
image: openzipkin/zipkin
container_name: ms_zipkin
ports:
- 9411:9411
environment:
- STORAGE_TYPE=mysql
# Point the zipkin at the storage backend
- MYSQL_DB=zipkin
- MYSQL_USER=root
- MYSQL_PASS=root
- MYSQL_HOST=ms_mariadb
- MYSQL_TCP_PORT=3306
networks:
ms_network:
ipv4_address: 172.171.1.12
depends_on:
- ms_mariadb
当安装了数据库后,还需要执行zipkin的sql脚本来创建其需要的表,脚本也在文后源码中。
引入依赖
pom
文件中引入sleuth的依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
pom
文件中引入zipkin的依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-sleuth-zipkin</artifactId>
</dependency>
配置
spring:
zipkin:
enabled: true
baseUrl: http://localhost:9411
sleuth:
sampler:
rate: 100
上面配置了zipkin的服务地址,以及采样率,这里为了测试将采样率设置为100%。
注意每个服务都要配置哦,这样才能完成全链路的追踪。
使用
当我们引入sleuth的starter后,其就自动为我们的调用织入了追踪信息,例如我们这里使用的OpenFeign
,此外它还可以为rabbitmq,kafka等消息队列织入追踪信息。
当我们的order-service这个服务的接口/order/payment
被调用时就会输出如下的日志:
2022-10-22 09:04:10.263 DEBUG [order-service,9c759536a9740bb8,fd458cf91ce56f44] 81008 --- [nio-7002-exec-4] o.s.web.servlet.DispatcherServlet : POST "/order/payment", parameters=
查看日志中[order-service,9c759536a9740bb8,fd458cf91ce56f44]
这部分,后面的两个id,分别是traceId和spanId,sleuth会把这些信息传递给zipkin。
接下来我们登录zipkin后台来看下
- 登录
浏览器访问 http://localhost:9411
如下图所示,红框tab表示你要查询的链路,可以点击那个+
号红色按钮来添加条件查询。蓝框是全局展示调用链路的依赖图,这个特别棒,有了它你再也不用担心请求时怎么走的了。
- 查找链路
你可以通过各种条件来查询链路,例如直接从api-gateway来查,查到的是最全的。
然后点击右边的Show按钮,就会展示此trace的详情。
从上面的图,你已经可以清晰的看到调用链,以及每个span所花费的时间。例如从上图可知,最后一个logistics-service
耗时最久,达到了2秒多,导致整个请求的响应时间达到2秒多,所以找到了最慢的点,然后进行优化。
我们这里出现了redis服务,那是因为网关使用了Redis限流器,所以所有流经gateway的请求都走了redis。
- 查看链路依赖
如果你已经查到了traceId,那么直接在右上角使用traceId结合时间来查询即可。
图中清晰的展示了各个此链路的各个节点,实际上zipkin展示的是动态图,你会看到不断有小圆点从一个服务跑到另一个服务,特别棒
总结
在SpringCloud中如何进行链路追踪就至此链路追踪就介绍完了,只是介绍了入门使用,更复杂的还是要在实际工作中慢慢总结,毕竟万事开头难,入门后就靠后天发展了…
源码
一如既往,你可以在Github上找到本文的源代码:master-microservice
kubnernetes集群部署zipkin+kafka+elasticsearch实现链路追踪(代码片段)
...目录方案设计环境准备部署ZipkinServer部署Zipkin-Dependencies微服务应用配置测试查看链路信息方案设计SpringCloud微服务使用Sleuth+Zipkin的应用架构实现链路追踪的逻辑图如下:从架构图中可以看到:我们构建了一个服务网关... 查看详情
kubnernetes集群部署zipkin+kafka+elasticsearch实现链路追踪(代码片段)
...目录方案设计环境准备部署ZipkinServer部署Zipkin-Dependencies微服务应用配置测试查看链路信息方案设计SpringCloud微服务使用Sleuth+Zipkin的应用架构实现链路追踪的逻辑图如下:从架构图中可以看到:我们构建了一个服务网关... 查看详情
sleuth+zipkin实现springcloud链路追踪(代码片段)
...入客户端2、配置文件3、运行效果七、小结一、前言在全链路监控:方案概述与比较一文中,我们有详细介绍过分布式链路跟踪的实现理论基础。我们看到 查看详情
sleuth+zipkin服务链路追踪(代码片段)
...d-sleuth/2.1.3.RELEASE/single/spring-cloud-sleuth.html一、为什么要用链路追踪微服务架构是一个分布式架构,它按业务划分服务单元,一个分布式系统往往有很多个服务单元。由于服务单元数量众多& 查看详情
sleuth+zipkin服务链路追踪(代码片段)
...d-sleuth/2.1.3.RELEASE/single/spring-cloud-sleuth.html一、为什么要用链路追踪微服务架构是一个分布式架构,它按业务划分服务单元,一个分布式系统往往有很多个服务单元。由于服务单元数量众多& 查看详情
全链路追踪spring-cloud-sleuth-zipkin
...架构下多个服务之间相互调用,在解决问题的时候,请求链路的追踪是十分有必要的,鉴于项目中采用的springcloud架构,所以为了方便使用,便于接入等项目中采用了springcloudsleuth+zipkin。现总结如下: springcloudsleuth+z... 查看详情
springcloud链路追踪sleuth+twitterzipkin中zipkin服务
2021年5月15日随笔springboot2.2.x版本以上,不建议自己写服务了,我尝试了很多方法没有成功,各种问题,所以需要下载它的jar包然后执行 下载地址:https://repo1.maven.org/maven2/io/zipkin/zipkin-server/2.23.2/zipkin-server-2.23.2-exec.jar下载完... 查看详情
springcloud整合分布式链路追踪系统sleuth和zipkin实战,分析系统瓶颈
...,来分析一下微服务架构中系统调用的瓶颈问题~SpringCloud链路追踪组件Sleuth实战官网 主要功能:做日志埋点什么是Sleuth 专门用于追踪每个请求的完整调用链路。 例如:【order-service,f674cc8 查看详情
springcloud(16)——链路追踪工具sleuth(代码片段)
追踪工具SleuthSpringCloudSleuth可以用来追踪微服务请求中的整个请求,通过它可以记录各个请求之间的耗时、异常等情况。使用SpringCloudSleuth时一般会跟Zipkin一起使用。SpringCloudSleuth收集到的一些跟踪信息可以发送给Zipkin,Zipkin提供... 查看详情
day441.sleuth链路追踪+zipkin分析-谷粒商城(代码片段)
Sleuth链路追踪+Zipkin分析一、为什么要用微服务架构是一个分布式架构,它按业务划分服务单元,一个分布式系统往往有很多个服务单元。由于服务单元数量众多,业务的复杂程度不同,如果出现了错误和异常... 查看详情
链路追踪zipkin+sleuth解决illegalcharacterinschemenameatindex0:192.168.100.130:9411/xxx/xx(代码片段)
链路追踪Zipkin+Sleuth解决Illegalcharacterinschemenameatindex0:192.168.100.130:9411/xxx/xx1.出现问题日志中出现如下警告这是访问url时,出现Illegalcharacterinschemenameatindex0:192.168.100.130:9411/xxx/xx问题2.解决方法更改application.properties或application.yml配... 查看详情
sleuth+zipkin链路追踪示例(代码片段)
ZipKin简介中文文档:https://www.bookstack.cn/read/dyingbleed-zipkin/326d459d6b9268be.md文档2:ttps://www.springcloud.cc/spring-cloud-greenwich.html#_spring_cloud_sleuthZipkinisadistributedtracingsystem.Ithelpsgathertimingdataneededtotroubleshootlatencyproblemsinservicearchitectur... 查看详情
链路追踪(zipkin+sleuth+kafka+mysql+elk+filebeats)(代码片段)
链路追踪一、基础环境准备1.ELK+filebeat日志收集搜索2.zipkin+sleuth链路追踪3.OCP环境mysql数据持久化4.dev环境kafka数据发送5.整体架构图二、启动ElasticSearch[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传... 查看详情
kubnernetes集群部署zipkin+kafka+elasticsearch实现链路追踪(代码片段)
...目录方案设计环境准备部署ZipkinServer部署Zipkin-Dependencies微服务应用配置测试查看链路信息方案设计SpringCloud微服务使用Sleuth+Zipkin的应用架构实现链路追踪的逻辑图如下:从架构图中可以看到:我们构建了一个服务网关... 查看详情
springcloud系列微服务的链路追踪(代码片段)
微服务的链路追踪概述1、微服务架构下的问题2、Sleuth概述2.1、Sleuth简介2.2、相关概念2.3、链路追踪Sleuth入门3、Zipkin的概述3.1、ZipkinServer的部署和配置4、客户端Zipkin+Sleuth整合5、基于消息中间件收集数据5.1、RabbitMQ的安装与启... 查看详情
java之springcloud微服务的链路追踪sleuth和zipkin(第三个阶段)springboot项目实现商品服务器端是调用(代码片段)
Java之SpringCloud微服务的链路追踪Sleuth和Zipkin(第三个阶段)【三】【SpringBoot项目实现商品服务器端是调用】一、微服务的链路追踪概述1、微服务架构下的问题2、Sleuth概述(1)简介(2)相关概念3、链路追... 查看详情
sleuth+zipkin实现springcloud链路追踪(代码片段)
...入客户端2、配置文件3、运行效果七、小结一、前言在全链路监控:方案概述与比较一文中,我们有详细介绍过分布式链路跟踪的实现理论基础。我们看到上图,知道在微服务架构下,系统的功能是由大量的微服... 查看详情
springcloudh版sleuth+zipkin服务链路监控与追踪(代码片段)
一、分布式链路监控与追踪上篇文章中我们讲解了SpringCloudStream消息驱动,本篇文章我们介绍喜爱Sleuth+Zipkin的服务链路监控与追踪。上篇文章地址:https://blog.csdn.net/qq_43692950/article/details/122026591在微服务系统中,随... 查看详情