# 探针简介

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

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

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

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

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

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

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

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

另外,让我们举例说明什么是 追踪状态

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

# 下一步