概述
在SkyWalking中,探针表示集成到目标系统中的代理或SDK库,它负责收集遥测数据,包括链路追踪和性能指标,根据目标系统的技术栈,探针可能有差异巨大的方式来达到以上功能,但从根本上来说都是一样的,即收集并格式化数据,并发送到后端。
从高层次上来讲,SkyWalking探针可分为以下三组:
- 基于语言的原生代理:这种类型的代理运行在目标服务的用户空间中,就像用户代码的一部分一样,如SkyWalking Java代理,使用 -javaagent 命令行参数在运行期间对代码进行操作,操作一词表示修改并注入用户代码,另一种代理是使用目标库提供的钩子函数或拦截机制,如你所见,这些探针是基于特定的语言和库的;
- 服务网格探针:服务网格探针从服务网格的 Sidecar 和控制面板收集数据。在以前,代理只用作整个集群的入口,但是有了服务网格和 Sidecar 之后,我们可以基于此进行观测了;
- 第三方打点类库:SkyWalking 也能够接收其他流行的打点库产生的数据格式,SkyWalking 通过分析数据,将数据格式化成自身的数据格式,该功能最初只能接收 Zipkin 的跨度数据。
因为基于语言的原生代理和服务网格探针的功能都是收集指标数据,你不必同时使用两者,否则你的系统就要承受双倍负载,且分析数据结构会翻倍。
有如下几种推荐的方式来使用探针:
- 只使用基于语言的原生代理;
- 只使用第三方打点库,如 Zipkin 打点系统;
- 只使用服务网格探针;
- 使用服务网格探针,配合语言原生代理 或 第三方打点库来追踪状态
举例说明追踪状态:
在默认情况下,基于语言的原生代理和第三方打点库都会发送分布式追踪数据到后台,后者分析/聚合这些追踪数据,追踪状态意味着,后端把这些追踪数据看作是日志,仅仅将他们保存下来,并且在追踪和指标之间建立联系,比如“这个追踪数据属于哪个服务?”