# 探针简介

在 SkyWalking 中, 探针表示集成到目标系统中的代理或 SDK 库, 它负责收集遥测数据, 包括链路追踪和性能指标. 根据目标系统的技术栈, 探针可能有差异巨大的方式来达到以上功能. 但从根本上来说都是一样的, 即收集并格式化数据, 并发送到后端.

从高层次上来讲, SkyWalking 探针可分为以下三组.

  • 基于语言的原生代理. 这种类型的代理运行在目标服务的用户空间中, 就像用户代码的一部分一样, 如 SkyWalking Java 代理, 使用 -javaagent 命令行参数在运行期间对代码进行操作, 操作一词表示修改并 注入用户代码. 另一种代理是使用目标库提供的钩子函数或拦截机制. 如你所见, 这些探针是基于特定的语言和库的.

  • 服务网格探针. 服务网格探针从服务网格的 Sidecar 和控制面板收集数据. 在以前, 代理只用作整个集群的入口, 但是有了服务网格和 Sidecar 之后, 我们可以基于此进行观测了.

  • 第三方打点类库. SkyWalking 也能够接收其他流行的打点库产生的数据格式, SkyWalking 通过分析数据, 将数据格式化成自身的数据格式. 该功能最初只能接收 Zipkin 的跨度数据, 参考其他追踪系统的接收器了解更多.

因为基于语言的原生代理服务网格探针的功能都是收集指标数据, 你不必同时使用两者, 否则你的系统就要承受 双倍负载, 且分析数据结构会翻倍.

有如下几种推荐的方式来使用探针:

  1. 只使用基于语言的原生代理.
  2. 只使用第三方打点库, 如 Zipkin 打点系统.
  3. 只使用服务网格探针.
  4. 使用服务网格探针, 配合语言原生代理第三方打点库, 来追踪状态. (高级用法) 让我们举例说明什么是追踪状态

默认情况下, 基于语言的原生代理第三方打点库都会发送分布式追踪数据到后台, 后者分析/聚合这些追踪数据. 追踪状态意味着, 后端把这些追踪数据看作是日志, 仅仅将他们保存下来, 并且在追踪和指标之间建立联系, 比如"这个追踪数据属于哪个入口哪个服务?".

# 下一步