https://zhuanlan.zhihu.com/p/361579294
一、SkyWalking 是什么?
一个开源的可观测平台,用于从服务和云原生基础设施收集,分析, 聚合及可视化数据。
SkyWalking 提供了一种简便的方式来清晰地观测分布式系统,甚至横跨多个云平台。SkyWalking 更是一个现代化的应用程序性能监控(Application Performance Monitoring)系统,尤其专为云原生、基于容器的分布式系统设计。
二、为什么使用SkyWalking
SkyWalking为服务(service),服务实例(service instance),以及端点(endpoint)提供了可观测能力。
使用 SkyWalking 时,用户可以看到服务与端点之间的拓扑结构,每个服务/服务实例/端点的性能指标,还可以设置报警规则。
除此之外, 你还可以通过以下方式集成
概念讲解:
服务(service):表示对请求提供相同行为的一组工作负载。在使用打点代理或 SDK 的时候,你可以定义服务的名字。SkyWalking 还可以使用在 Istio 等平台中定义的名称。
服务实例(Service Instance):上述的一组工作负载中的每一个工作负载称为一个实例。就像 Kubernetes 中的 pods
一样,服务实例未必就是操作系统上的一个进程。 但当你在使用打点代理的时候,一个服务实例实际就是操作系统上的一个真实进程。
端点(Endpoint):对于特定服务所接收的请求路径,如 HTTP 的 URI 路径和 gRPC 服务的类名 + 方法签名。
三、SkyWalking架构
SkyWalking 逻辑上分为四部分:探针,平台后端,存储和用户界面。
四、探针
在 SkyWalking中,探针表示集成到目标系统中的代理或SDK库,它负责收集遥测数据,包括链路追踪和性能指标。根据目标系统的技术栈,探针可能有差异巨大的方式来达到以上功能。但从根本上来说都是一样的,即收集并格式化数据,并发送到后端。
从高层次上来讲,SkyWalking 探针可分为以下三组:
-javaagent
命令行参数在运行期间对代码进行操作,操作
一词表示修改并注入用户代码。另一种代理是使用目标库提供的钩子函数或拦截机制。如你所见,这些探针是基于特定的语言和库。你不必同时使用 基于语言的原生代理 和 服务网格探针 ,因为两者都收集指标数据,否则你的系统就要承受双倍负载,且分析数量会翻倍。
有如下几种推荐的方式来使用探针:
服务自动打点代理:
服务自动打点代理是基于语言的原生代理的一部分,这种代理需要依靠某些语言特定的特性,通常是一种基于虚拟机的语言。
1、自动打点代理是什么意思?
对于最终用户来说他们不需要修改代码(至少在绝大多数情况下),只是被代理给修改了,这种做法通常叫做"在运行时操作代码"。底层原理就是自动打点代理利用了虚拟机提供的用于修改代码的接口来动态加入打点的代码,如通过 javaagent premain 来修改 Java 类。
此外, 我们说大部分自动打点代理是基于虚拟机的,但实际上你也可以在编译期构建这样的工具。
2、有什么限制?
Goroutine
使得开发者可以低开销地来执行异步操作,在这些场景下,自动打点可能会遇到一些问题。所以说自动打点没有什么神秘的,总而言之就是,自动打点代理开发者写了一个激活程序,使得打点的代码自动运行,仅此而已
服务网格探针:
1、什么是服务网格?
服务网格通常用于描述组成此类应用程序的微服务网络以及它们之间的交互。随着服务网格的大小和复杂性的增长,它会变得更难理解和管理。它需要包括发现、负载平衡、故障恢复、度量和监视以及更复杂的操作需求A/B测试、金丝雀发布、限流、访问控制和端到端身份验证。
2、探针从哪里采集数据
Istio 是一个非常典型的服务网格的设计和实现。它定义了 控制平面 和 数据平面,被广泛使用。下面是 Istio 的架构 :
服务网格探针可以选择从 控制平面 和 数据平面 采集数据。在 Istio 中,指的是从 Mixer(Control Panel) 或者 Envoy sidecar(Data Panel) 中采集遥测数据。探针从客户端和服务器端收集每个请求的两个遥测实体,它们其实是相同的数据。
3、服务网格如何使后端工作
从探针中,您可以看到在这种探针中一定没有相关的跟踪,那么为什么 SkyWalking 平台仍然可以工作?
服务网格探针从每个请求收集遥测数据,因此它知道源、目标、端点、延迟和状态。通过这些,后端可以通过将这些调用合并为行来描述整个拓扑图,以及每个节点通过传入请求的度量。后端解析跟踪数据,请求相同的度量数据。因此,正确的表述是:
服务网格度量就是跟踪解析器生成的度量。他们是相同的。