学习笔记—微服务—技术栈实践(8)—链路追踪
为什么需要链路追踪
前文中有提到,微服务会把项目拆分,导致系统服务间的调用链路变得相当复杂,那么一个前端请求可能最终需要调用多个后端服务才能实现,当前端发起一个请求后,调用链路可能会非常复杂,比如A->B->C->D->B->C->O这样一条长长的链路才能获得所需要的调用,当整个请求出现不可用的时候,怎么知道是在哪一个服务端引发的问题呢?
很难确定,因此,跟进一个请求到底有哪些服务参与,参与的顺序怎么样,是非常关键的。
这也是为什么需要分布式链路追踪系统的原因。
链路追踪技术选型
链路追踪其实已经不算是新兴的概念和技术了,可以使用的组件非常多,比如sleuth、sky walking、zipkin、阿里鹰眼等等。
&emsp这些组件有一个共同的名字就是APM工具,Application Performance Management,换言之就是应用性能监控工具。
于此,介绍两种解决方案,分别为zipkin+sleuth和skywalking。
zipkin+sleuth
什么是Zipkin和Sleuth
Zipkin 和 Sleuth 是分布式追踪(Distributed Tracing)技术栈中的两个关键组件,通常用于监控微服务系统中跨服务的请求调用链。它们能够帮助开发者追踪请求在多个微服务中的流转路径,进而分析性能瓶颈和故障。它们的组合在 Spring Cloud 微服务架构中使用广泛。
Zipkin 是一个开源的分布式追踪系统,最初由 Twitter 开发。它负责收集、存储、分析和展示分布式系统中的调用链信息。通过收集来自不同微服务的追踪数据,Zipkin 可以帮助你了解一个请求的完整生命周期,精确地找到延迟较高的服务。
Sleuth 是 Spring Cloud 提供的一个分布式追踪解决方案,它为 Spring 应用提供了透明的追踪支持。Sleuth 与 Zipkin 搭配使用时,能够自动为请求生成追踪信息,并将这些追踪数据发送到 Zipkin。
换言之,zipkin负责收集和储存追踪信息(traces),并且提供web UI,提供REST API允许其他用户访问追踪数据,sleuth则是生成traceId等内容,并传播。
Sleuth 自动收集追踪数据,并将这些数据格式化为 Zipkin 所识别的格式。
Sleuth 将采集到的数据通过 HTTP 或者消息队列(如 Kafka)发送到 Zipkin 服务端。
Zipkin 收集到 Sleuth 发送的追踪数据后,存储并对其进行分析和可视化展示。
Sleuth+Zipkin的使用
首先,需要有Zipkin,以docker为例:
1 |
|
其次,需要在pom中加入spring cloud sleuth和zipkin的依赖:
1 |
|
在application中配置sleuth将追踪数据发送到zipkin服务器上:
1 |
|
启动 Spring Boot 应用后,Sleuth 会自动为每个请求生成追踪信息,并发送到 Zipkin 服务器。你可以在 Zipkin 的 Web UI 中查看到服务间的调用链。
需要注意的是,在较新的版本中,Spring Cloud Sleuth 项目被彻底移除了,被迁移到了 Micrometer 这些相关项目,此外,对代码也有一定的侵入性,好在比较轻量级。
Skywalking
什么是Skywalking
Skywalking是属于Apache旗下的一个开源项目,提供分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案。
比起前面的zipkin等,这个东西较为新兴一点,有多种监控手段多语言自动探针,社区活跃支持告警,同时对代码的侵入性也非常小,只需要植入探针即可。
Skywalking的组成
skywalking可以看作有以下几个部分组成:
探针(Agent)
探针是部署在应用程序中的轻量级组件,用于收集应用程序的运行数据。SkyWalking 提供多种语言的探针(如 Java、C++、Node.js 等),这些探针能够自动监控应用程序的性能,收集跟踪信息、指标数据等,并发送到后端的接收器。
OAP服务
OAP 是 SkyWalking 的核心组件,负责接收来自探针的数据,进行分析和处理。这是整个系统的数据处理和存储中心。在数据处理上,接收探针发送的跟踪数据、日志数据和指标数据,进行存储、聚合和分析。
在可拓展性上,支持插件机制,用户可以根据需求扩展 SkyWalking 的功能,比如添加新的存储后端或自定义分析逻辑。
在储存系统上,支持多种存储后端,包括 Elasticsearch、H2、MySQL、TiDB 等,用于持久化监控数据。
存储层
存储层是 SkyWalking 的数据持久化组件,负责存储 OAP 服务处理后的数据。SkyWalking 支持多种存储后端,包括 Elasticsearch、H2、MySQL、TiDB 等,用户可以根据需求选择合适的存储后端。
UI界面
UI界面是 SkyWalking 的用户界面,用于展示监控数据和指标。它提供了一个直观的界面,让用户可以查看和分析应用程序的性能,包括跟踪数据、服务拓扑、性能指标等。
Skywalking的安装
此处采用Docker的方式对Skywalking进行安装。
以S可以walking9.2.0的一个简单的安装启动方法为例,首先要拉去oap和ui:
1 |
|
在此基础上启动:
1 |
|
1 |
|
当然,也可以采用elasticsearch等来作为skywalking的储存工具,将默认的H2储存库进行修改。
Skywalking的使用
Java中的使用
在Java上的使用是很容易的。
首先,对于Jar包来说,首先,进入skywalking的官方发布界面下载完整的agent包,https://skywalking.apache.org/downloads/
通常目录结构是这样的:
1 |
|
在启动 Java 应用时,使用 -javaagent 参数将 SkyWalking Agent 附加到应用中。假设你已经下载并解压了 SkyWalking Agent:
1 |
|
-javaagent:指定 SkyWalking Agent JAR 的路径。
-Dskywalking.agent.service_name:设置服务名称,在 SkyWalking UI 中展示此服务的监控数据。
-Dskywalking.collector.backend_service:指定 SkyWalking OAP 服务的地址,通常是 skywalking-backend-ip:port。
此外,在config文件中,也可以根据一些设置修改默认的一些配置,比如日志级别,默认是INFO的。
Python中的使用
在python上的使用也是非常容易的。
首先,skywalking提供的有python的探针包:
1 |
|
随后,可以初始化探针在程序入口:
1 |
|
而后便可集成,两者均需要正确的OAP后端的IP和端口,来确保数据可以被正确的收集和展示。