微服务篇-C 深入理解第一代微服务(SpringCloud)_X 深入理解Sleuth+Zipkin服务链路监控和追踪

原创作者:田超凡(程序员田宝宝)

版权所有,引用请注明原作者,严禁复制转载

Part 1 理论部分

1 服务链路监控和追踪产生的背景?

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

2 Sleuth的组成部分?

Sleuth的组成部分包括traceId,spanId,Trace.

traceId:发起方调用接口的时候会创建一个全局唯一的id,即traceId,作为全局追踪id。

spanId:每次RPC调用接口的时候都会创建一个新的spanId,用来存储当前RPC请求的信息。

Trace:类似于树结构的span集合,表示一个完整的调用链路,调用链路的唯一标识是traceId,通过traceId全局追踪id,spanId请求追踪id,parentId上一个请求追踪id,将收集到的span汇聚成一个tree,再提供一个request的整体流程。

3 什么是Zipkin?

Zipkin是Twitter的一个开源项目,它是基于Google Dapper实现的,我们可以使用它来收集各个服务器上请求链路的追踪数据,并通过它提供的REST API接口来辅助查询追踪数据以实现对微服务系统中服务调用链路的监控,从而及时发现系统中出现的延迟过高的问题,除了面向开发的API接口之外,它还提供了方便的UI组件来帮助我们直观地搜索追踪信息和分析请求链路调用明细,比如可以查询某段时间内各用户请求的处理时间等。

Zipkin和Config的结构类似,分为服务器端Server和客户端Client,这里的客户端Client指的就是各个微服务应用。

4 Sleuth+Zipkin实现服务链路追踪的原理?

1 发起方调用接口的时候会创建一个全局唯一的id,即traceId,作为全局追踪id,并存放到请求中。

2 Sleuth会在每次RPC调用接口的时候都会创建一个新的spanId,用来存储当前RPC请求的信息。

3 Sleuth和Zipkin整合可以实现图形化界面管理接口的请求链路调用信息。

Part 2 实践部分

Zipkin环境搭建

在 Spring Boot 2.0 版本之后,官方已不推荐自己搭建Zipkin服务端了,而是直接提供了编译好的 jar 包。详情可以查看官网:Quickstart · OpenZipkin

注意:zipkin官网已经提供定制了,使用官方jar运行即可。

默认端口号启动zipkin服务

java --jar zipkin.jar 默认端口号; 9411

http://192.168.18.211:9411

指定端口号启动9411

java -jar zipkin.jar --server.port=8080

http://192.168.18.211:8080

ZipkinClient集成

Maven依赖

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

application.yml

|-------------------------------------------------------------------------------------------------------------------------------------|
| spring: application: name: app-ittcf-member zipkin: base-url: http://192.168.18.211:9411/ ###全部采集 sleuth: sampler: probability: 1.0 |

ZipkinClient集成RabbitMQ

|------------------------------------------------------------------------------------------------------------------------------------------------|
| <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-stream-binder-rabbit</artifactId> </dependency> |

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| spring: application: name: app-ittcf-order zipkin: base-url: http://192.168.18.211:9411/ ### 默认可以不用写 rabbitmq: ####连接地址 host: 127.0.0.1 ####端口号 port: 5672 ####账号 username: guest ####密码 password: guest ###全部采集 sleuth: sampler: probability: 1.0 |

request.getHeader("X-B3-TraceId");

request.getHeader("X-B3-TraceId")+",spanid:"+ request.getHeader("X-B3-SpanId")

本文部分素材转载自蚂蚁课堂

相关推荐
slowlybutsurely1 分钟前
Cursor快速入门
java·ai编程·cursor
天天摸鱼的java工程师7 分钟前
假设你在开发订单系统时遇到高并发下库存扣减出错,如何解决?由浅入深分析
java·后端·面试
都叫我大帅哥8 分钟前
Redis的ZSet:从“青铜”到“王者”的排序神器
java·redis
肖笙XiaoSheng20 分钟前
使用Gemini2.5 pro 优化我的定时任务(二)
java·后端·代码规范
小小霸王龙!21 分钟前
互联网大厂Java面试实录:Spring Boot与微服务在电商场景中的应用
java·spring boot·redis·微服务·电商
深栈解码24 分钟前
JUC并发编程 CAS运行机制详解
java·后端
草履虫建模25 分钟前
Postman - API 调试与开发工具 - 标准使用流程
java·测试工具·spring·json·测试用例·postman·集成学习
深栈解码25 分钟前
JUC并发编程 ThreadLocal解析
java·后端
衍生星球32 分钟前
Maven 3.9.6的下载和配置
java·maven·springboot
缘来是庄39 分钟前
设计模式之代理模式
java·设计模式·代理模式