SkyWalking 优势
首先是像传统的方式那样,SkyWalking为服务提供了自动打点的代理,如Java,C#,Node.js,Go,PHP以及Nginx LUA(包括Python和C ++调用的SDK捐献)。
对于多种语言,持续部署环境,云原生基础设施正变得更加强大,但也更加复杂。
Skywalking的服务网格接收器可以让Skywalking接收来自服务网格框架(例如Istio,Linkerd)的遥测数据,以帮助用户理解整个分布式系统。
总的来说,SkyWalking为服务(服务),服务实例(服务实例),以及端点(端点)提供了可观察能力。服务(服务),实例(实例)以及端点(端点)等概念在现代随处可见,所以让我们先了解一下他们在SkyWalking中都表示什么意思:
- 服务(Service)。表示对请求提供相同行为的一组工作负载。在使用打点代理或SDK的时候,你可以定义服务的名字。SkyWalking还可以使用在Istio等平台中定义的名称。
- 服务实例(Service Instance)。上述的一组工作负载中的每一个工作负载称为一个实例。就像Kubernetes中的pods一样,服务实例未必就是操作系统上的一个进程。但当你在使用打点代理的时候,一个服务实例实际就是操作系统上的一个真实进程。
- 端点(Endpoint)。对于特定服务所接收的请求路径,例如HTTP的URI路径和gRPC服务的类名+方法签名。
使用SkyWalking时,用户可以看到服务与端点之间的拓扑结构,每个服务/服务实例/端点的性能指标,还可以设置报警规则。
概述
SkyWalking 是一个开源可观察性平台,用于收集、分析、聚合和可视化来自服务和云原生基础设施的数据。SkyWalking 提供了一种简单的方法来维护分布式系统的清晰视图,即使是跨云也是如此。它是一种现代 APM,专为云原生、基于容器的分布式系统而设计。
整体结构
SkyWalking 在逻辑上分为四个部分:探针、平台后端、存储和 UI
- 探针收集数据并重新格式化以满足 SkyWalking 要求(不同的探针支持不同的来源)。
- 平台后端支持数据聚合、分析和流处理,包括跟踪、指标和日志。
- 存储通过开放/可插拔接口存储SkyWalking 数据。您可以选择现有的实现,例如 ElasticSearch、H2、MySQL、TiDB、InfluxDB,或者实现您自己的。欢迎新存储实现者的补丁!
- 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) 跨云部署
在所有这些情况下,SkyWalking 应该运行良好
- 可互操作. 可观测性是一个庞大的领域, 即使有强大的社区, SkyWalking 不可能支持所有方方面面, 因此 SkyWalking 支持与其他运维支撑系统进行互操作, 主要是探针, 如 Zipkin, Jaeger, OpenTracing 和 OpenCensus. SkyWalking 接收并理解他们的数据格式, 这对于终端用户来说是非常有用的, 因为不需要他们更换已有的库。
探针简介
在 SkyWalking 中, 探针表示集成到目标系统中的代理或 SDK 库, 它负责收集遥测数据, 包括链路追踪和性能指标。根据目标系统的技术栈, 探针可能有差异巨大的方式来达到以上功能. 但从根本上来说都是一样的, 即收集并格式化数据, 并发送到后端。
从高层次上来讲, SkyWalking 探针可分为以下三组:
-
基于语言的原生代理. 这种类型的代理运行在目标服务的用户空间中, 就像用户代码的一部分一样. 如 SkyWalking Java 代理, 使用 -javaagent 命令行参数在运行期间对代码进行操作, 操作 一词表示修改并注入用户代码. 另一种代理是使用目标库提供的钩子函数或拦截机制. 如你所见, 这些探针是基于特定的语言和库。
-
服务网格探针. 服务网格探针从服务网格的 Sidecar 和控制面板收集数据. 在以前, 代理只用作整个集群的入口, 但是有了服务网格和 Sidecar 之后, 我们可以基于此进行观测了。
-
第三方打点类库. SkyWalking 也能够接收其他流行的打点库产生的数据格式. SkyWalking 通过分析数据,将数据格式化成自身的链路和度量数据格式. 该功能最初只能接收 Zipkin 的 span 数据. 更多参考其他追踪系统的接收器。