推广 热搜: 可以  企业  page  搜索引擎  个数  百度  使用    选择  设备 

SpringCloud集成sleuth和zipkin实现微服务链路追踪

   日期:2024-12-21     移动:http://ww.kub2b.com/mobile/quote/8281.html

最近项目上准备引入接口调用链路追踪,说到这个我们就不得不想到springcloud全家桶中的sleuth了。他可以将跨多个服务请求链路记录下来,供我们查询分析。然后,我们在此基础上用zipkin来采集和上报分析请求链路,简直不要太爽。那么今天就分享一期微服务架构接入sleuth+zipkin实战演示。

spring cloud sleuth介绍

1.span(跨度),基本工作单元。一次链路调用,创建一个span,span用一个64位id唯一标识。包括:id,描述,时间戳事件,spanld,span父id.span被启动和停止时,记录了时间信息,初始化span叫:rootspan,它的span id和trace id相等。
2.trace(跟踪),一组共享"root span”的span组成的树状结构称为 trace,trace也有一个64位ID,trace中所有span共享一个trace id。类似于一颗 span 树。
3.annotation (标签),annotation用来记录事件的存在,其中,核心annotation用来定义请求的开始和结束CS(Client Send客户端发起请求)。客户端发起请求描述了span开始
SR(Server Received服务端接到请求)。服务端获得请求并准备处理它。SR-CS=网络延迟SS(Server Send服务器端处理完成,并将结果发送给客户端)。表示服务器完成请求处理,响应客户端时。SS-SR=服务器处理请求的时间
CR(Client Received 客户端接受服务端信息)。span结束的标识。客户端接收到服务器的响应。CR-CS=客户端发出请求到服务器响应的总时间。
其实数据结构是一颗树,从root span 开始。

工具定位
Spring Cloud Sleuth是一个用于Spring Cloud应用程序的分布式追踪工具,它主要专注于在服务间传播追踪信息。

主要功能
传播追踪上下文:在服务调用间传递Trace ID和Span ID,确保整个请求链路的追踪信息保持一致。
集成日志框架:修改日志框架的配置,使得日志记录中包含Trace和Span的ID。
与Spring Cloud生态集成:与Spring Cloud的其他组件(如Ribbon、Hystrix、Zuul等)无缝集成。
依赖性:Sleuth是为Spring Cloud应用程序设计的,它依赖于Spring框架和Spring Boot。

zipkin介绍

Zipkin与Sleuth的协作

数据收集:Sleuth负责在Spring Cloud应用程序中生成和传播追踪数据,而Zipkin负责收集这些数据。
数据展示:Sleuth生成的追踪数据可以通过Zipkin的Web界面进行查询和展示。
集成:在Spring Cloud应用程序中,Sleuth通常与Zipkin一起使用,Sleuth负责追踪信息的生成和传播,Zipkin负责存储和展示。

由于springcloud F版本不支持自定义zipkin server,故我们采用docker镜像进行部署zipkin server。

docker pull 镜像

docker pull openzipkin/zipkin:latest

启动zipkin server

未持久化(内存)
docker run --name zipkin-server -d --restart=always -p 9411:9411 openzipkin/zipkin:latest
http://127.0.0.1:9411/zipkin/

持久化到MySQL5
docker run --name zipkin-server-mysql -d --restart=always -p 19411:9411 -e MYSQL_USER=root -e MYSQL_PASS=12345678 -e MYSQL_HOST=127.0.0.1 -e STORAGE_TYPE=mysql -e MYSQL_DB=zipkin -e MYSQL_TCP_PORT=13306 openzipkin/zipkin:3.3
mysql DD语句如下

 

持久化到ES
docker run --name zipkin-server-es -d -p 19411:9411 --restart=always -e STORAGE_TYPE=elasticsearch -e ES_HOSTS=127.0.0.1:9200 openzipkin/zipkin:latest

JAR运行
curl -sSL https://zipkin.io/quickstart.sh | bash -s
java -jar zipkin.jar --STORAGE_TYPE=mysql --MYSQL_HOST=127.0.0.1 --MYSQL_TCP_PORT=3306 --MYSQL_DB=zipkin --MYSQL_USER=root --MYSQL_PASS=12345678

pom引入依赖 (springboot2.6+)

 

appilication.yml配置修改

 

type=web也就是通过 HTTP 的方式发送数据到 Zipkin 。
如果请求量比较大,这种方式其实性能是比较低的,一般情况下我们都是通过消息中间件来发送,比如 RabbitMQ 。如果日志数据量比较大,一般推荐拥有更高吞吐量的 Kafka 来进行日志推送。这种方式就是让服务将 Sleuth 收集的日志推给 MQ ,让 Zipkin 去监控 MQ 的信息,通过 MQ 的队列获取到服务的信息。这样就提高了性能。

而日志的存储则可以采用mysql、 Elasticsearch 对数据进行持久化,这样可以保证 Zipkin 重启后,链路信息不会丢失。

增加测试链路代码

链路为
user-service --> order-service --> finance-service
user-service增加请求入口getOrderAmount

 

user-service增加feign调用order-service

 

order-service增加调用入口getOrderAmount

 

order-service增加feign调用finance-service

 

finance-service增加请求入口getFee

 
 

启动微服务调用getOrderAmount()

本文地址:http://ww.kub2b.com/quote/8281.html     企库往 http://ww.kub2b.com/ ,  查看更多

特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


0相关评论
相关最新动态
推荐最新动态
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号