OpenTelemetry 项目中建议通过 OpenTelemetry Collector 来进行遥测数据的收集,OpenTelemetry Collector 提供了一套与后端服务商无关的通用的遥测数据的接收、处理和导出的能力。它解决了需要部署多个 Agent 进行不同格式的数据采集的问题,仅仅通过一个 Collector 进行统一的数据收集并支持发送给依赖不同数据格式的后端服务,例如 Jaeger、Prometheus 等。Collector 是完全用户可控的,用于可以决定它们的遥测数据最终存储到什么服务。Collector 是 OpenTelemetry 默认的遥测数据导出服务。

部署

OpenTelemetry Collector 提供了一个单一的二进制文件,它支持两种部署模式:

  • Agent:与应用程序一起运行或者与应用程序在同一主机上运行(Sidecar或者DaemonSet模式)。
  • Gateway:一个或者多个 Collector 实例可以组成一个独立的服务,用于收集某个集群、数据中心或某个地域的遥测数据。

组件

Collector 服务由以下几个组件组成:

  • receivers:如何将数据收集到 Collector 中,支持推拉等方式;
  • processors:如何处理接收到的数据;
  • exporters:如何发送数据给后端服务,支持推拉等方式;

这些组件是通过 Pipeline 的模式启用的,可以通过在 YAML 中定义多个组件组合从而形成一个遥测数据处理的 Pipeline。

代码库

OpenTelemetry 中提供了 Collector 相关的两个代码库:

  • Core:Collector 的基础组件,例如通用的 receivers、processors 和 exporters,支持对接一些流行的开源项目,包括 Jaeger、Prometheus 和 Fluent Bit。
  • Contrib:除了 Core 之外,其余所有可选的组件,例如针对某些特定后端服务提供商的 receivers、processors 和 exporters 等。