一、为什么要用微服务链路追踪
在微服务中,有的山下游可能有十几个服务,如果某一环出了问题,排查起来非常困难,所以,就需要进行链路追踪,来帮助排查问题。
通过链路追踪,可以可视化地追踪请求从一个微服务到另一个微服务的调用情况。除了排查问题,链路追踪黑还可以帮助优化性能,可视化依赖关系、服务监控和告警。
二、SpringCloud微服务链路追踪方案
Spring Cloud提供了多种选择的微服务链路追踪方案。以下是一些常用的方案:
-
Zipkin:Zipkin 是一个开源的分布式实时追踪系统,由 Twitter 开发并贡献给开源社区。Spring Cloud Sleuth 提供了与 Zipkin 的集成,可以通过在微服务中添加相应的依赖和配置,将追踪信息发送到 Zipkin 服务器,并通过 Zipkin UI 进行可视化展示和查询。
-
Jaeger:Jaeger 是 Uber 开源的分布式追踪系统,也被纳入了 CNCF(云原生计算基金会)的维护。通过使用 Spring Cloud Sleuth 和 Jaeger 客户端库,可以将追踪信息发送到 Jaeger 并进行可视化展示和查询。
-
SkyWalking:Apache SkyWalking 是一款开源的应用性能监控与分析系统,提供了对 Java、.NET 和 Node.js 等语言的支持。它可以与 Spring Cloud Sleuth 集成,将追踪数据发送到 SkyWalking 服务器进行可视化展示和分析。
-
Pinpoint:Pinpoint 是 Naver 开源的分布式应用性能监控系统,支持 Java 和 .NET。它提供了与 Spring Cloud Sleuth 的集成,可以将追踪数据发送到 Pinpoint 服务器,并通过其 UI 进行分析和监控。
这些方案都可以与 Spring Cloud Sleuth 进行集成,Spring Cloud Sleuth 是 Spring Cloud 中的一个组件,提供了在微服务调用时生成追踪信息的能力。
三、SkyWalking详解
SkyWalking是一个针对分布式系统的应用性能监控(APM)和可观测性分析平台。它提供了一种简便的方式来清晰地观测分布式系统,甚至可以观测横跨不同云的系统。具体来说,SkyWalking可以用于收集、分析、聚合以及可视化分布式系统的数据,这些数据包括分布式拓扑图、应用性能指标、Trace和日志等。通过使用SkyWalking,可以提高分布式系统的可靠性和性能,同时可以帮助开发者和运维团队快速定位和解决问题。此外,SkyWalking还可以设置告警规则,当系统出现异常情况时及时通知相关人员,以减少系统故障时间和提高系统的可用性。因此,SkyWalking对于分布式系统的监控和管理非常重要。
SkyWalking数据收集和传输
SkyWalking中的数据主要通过以下步骤进行收集和传输:
- 数据采集:SkyWalking的探针(probe)会与应用程序进行集成,从而可以获取到应用程序运行时的各种数据,包括但不限于请求响应时间、调用链路、系统资源使用情况等。这些数据随后被发送到SkyWalking的数据收集器(backend)中。
- 数据传输:SkyWalking的数据收集器接收到探针发送的数据后,会对数据进行一些必要的处理,例如数据清洗、过滤和汇总等。处理后的数据将被存储在SkyWalking的数据存储组件中,这一组件在SkyWalking的配置文件中被称为“database”。
- 数据消费:SkyWalking的数据存储组件不仅可以将收集到的数据存储在本地,还可以将数据发送给其他系统进行进一步的处理和消费。例如,SkyWalking可以将数据发送给可视化组件(UI),从而可以在图形化界面中查看和监控应用程序的性能数据。SkyWalking还可以将数据发送给告警系统,以便在性能问题发生时及时通知相关人员。
在SkyWalking的数据传输过程中,可能会使用到GRPC等协议进行高效的数据传输。而在数据消费阶段,SkyWalking也支持多种不同的数据处理和消费方式,具体方式可以在配置中进行设置。