历史资料:以下 Sleuth + Zipkin 配置不适用于当前 Spring Boot 4 项目,请勿按旧步骤添加依赖或修改 Nacos。当前方案见 OpenTelemetry 与 Jaeger 链路追踪。
链路追踪介绍
- 在大型系统的微服务化构建中,一个系统被拆分成了许多模块。这些模块负责不同的功能,组合成系统,最终可以提供丰富的功能。在这种架构中,一次请求往往需要涉及到多个服务。互联网应用构建在不同的软件模块集上,这些软件模块,有可能是由不同的团队开发、可能使用不同的编程语言来实现、有可能布在了几千台服务器,横跨多个不同的数据中心。
为什么需要链路追踪?
- 微服务架构是通过业务来划分服务的,使用 REST 调用。对外暴露的一个接口,可能需要很多个服务协同才能完成这个接口功能,如果链路上任何一个服务出现问题或者网络超时,都会形成导致接口调用失败。随着业务的不断扩张,服务之间互相调用会越来越复杂。
那该如何解决呢?
- sleuth : 链路追踪器
- zipkin:链路分析器(可视化)
组件Sleuth
- 推荐学习视频
- 介绍:SpringCloud Sleuth主要功能就是在分布式系统中提供追踪解决方案。它大量借用了Google Dapper的设计, 先来了解一下Sleuth中的术语和相关概念。
组件Zipkin
- 推荐学习视频
- 介绍:Zipkin 是 Twitter 的一个开源项目,它基于Google Dapper实现,它致力于收集服务的定时数据,以解决微服务架构中的延迟问题,包括数据的收集、存储展现、查找和我们可以使用它来收集各个服务器上请求链路的跟踪数据,并通过它提供的REST API接口来辅助我们查询跟踪数据以实现对分布式系统的监控程序,从而及时地发现系统中出现的延迟升高问题并找出系统性能瓶颈的根源,除了面向开发的 API 接口之外,它也提供了方便的UI组件来帮助我们直观的搜索跟踪信息和分析请求链路明细,比如:可以查询某段时间内各用户请求的处理时间等。
- joolun-common-core/pom.xml中引入maven依赖
<!--日志跟踪zipkin-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
<version>2.2.8.RELEASE</version>
</dependency>
- nacos中配置application.yml文件
spring:
cloud:
zipkin:
base-url: http://127.0.0.1:9411
discovery-client-enabled: false # 不要让nacos把zipkin注册进去(可以不写)
sleuth:
sampler:
probability: 1.0
- 下载zipkin服务端:https://pan.baidu.com/s/15Sh64DgAAui4j8dTDaOghA 提取码: 8888
- 先启动zipkin服务端
java -jar zipkin.jar
- 再重启所有服务