概述
SkyWalking是一个开源的可观测平台,用于收集,分析,聚合,以及可视化处理来自服务和云原生框架的数据。SkyWalking提供了一种简单的方法来维护分布式系统的清晰视图,即使是跨云。 它是一种现代APM,专门为云原生、基于容器的分布式系统设计。
为什么使用SkyWalking
SkyWalking在不同场景中为观察和监控分布式系统提供了解决方案。首先SkyWalking为服务提供了自动打点的代理,如Java,C#,Go等
对于多数语言,持续部署环境,云原生基础设施变得更加强大也更加复杂。
SkyWalking的服务网格接收器可以让SkyWalking接收来自服务网络框架(例Istio,Linkerd)的遥测数据,帮助用户理解整个分布式系统。
SkyWalking为服务、实例、端点提供了可观测能力。
- 服务(Service):表示对请求提供相同行为的一组工作负载,在使用打点代理或SDK的时候可以定义服务的名字,SkyWalking还可以使用在Istio等平台中定义的名称
- 服务实例(Service Instance):上述的一组工作负载中每一个工作负载称为一个实例,,服务实例未必是操作系统上面的一个进程,但当你使用打点代理的时候,一个服务实例实际上就是操作系统上的一个真实进程
- 端点(Endpoint):对于特定服务所接受的请求路径,如HTTP的URI路径和gRPC服务的类名+方法签名
使用SkyWalking时,用户可以看到服务与端点之间的拓扑结构,每个服务/实例/端点的性能指标,还可以设置报警规则
架构
- 探针:基于不同来源的探针可能是不同的,但作用都是收集数据并格式化为SkyWalking适用的格式
- 平台后端:支持数据聚合,数据分析以及驱动数据从探针到用户界面的流程。
- 存储:通过开放的插件化的接口存放SkyWalking数据,可以选择既有的存储系统:ElasticSearch、H2或MySQL集群(Sharding-Sphere管理)
- UI:一个基于接口高度定制化的Web系统,可以可视化查看和管理SkyWalking数据
设计目标
SkyWalking项目的核心设计目标
- 保持可观测性:不管目标系统如何部署, SkyWalking 总要提供一种方案或集成方式来保持对目标系统的观测, 基于此, SkyWalking 提供了数种运行时探针。
- 拓扑结构,性能指标和追踪一体化:理解分布式系统的第一步是通过观察其拓扑结构图. 拓扑图可以将复杂的系统在一张简单的图里面进行可视化展现. 基于拓扑图,运维支撑系统相关人员需要更多关于服务/实例/端点/调用的性能指标. 链路追踪(trace)作为详细的日志, 对于此种性能指标来说很有意义, 如你想知道什么时候端点延时变得很长, 想了解最慢的链路并找出原因. 因此你可以看到, 这些需求都是从大局到细节的, 都缺一不可. SkyWalking 集成并提供了一系列特性来使得这些需求成为可能, 并且使之易于理解
- 轻量级:有两个方面需要保持轻量级. (1) 探针, 我们通常依赖于网络传输框架, 如 gRPC. 在这种情况下, 探针就应该尽可能小, 防止依赖库冲突以及虚拟机的负载压力(例如 JVM 永久代内存占用压力). (2) 作为一个观测平台, 在你的整个项目环境中只是次要系统, 因此我们使用自己的轻量级框架来构建后端核心服务. 所以你不需要部署并维护大数据相关的平台, SkyWalking 在技术栈方面应该足够简单
- 可插拔:SkyWalking 核心团队提供了许多默认实现, 但这肯定是不够的, 也不可能适用于每一种场景, 因此我们提供了大量的特性来支持可插拔功能。
- 可移植: SkyWalking 可以运行在多种环境下, 包括: (1) 使用传统的注册中心, 如 Eureka (2) 使用包含服务发现的RPC框架,如Spring Cloud, Apache Dubbo (3) 在现代基础设施中使用服务网格 (4) 使用云服务 (5) 跨云部署
- 可互操作