什么是 OpenTelemetry Collector?

OpenTelemetry Collector 提供了一个与厂商无关的实现方式,用于 接收、处理和导出遥测数据 ,它消除了运行、操作和维护多个代理/收集器的需求。

事实上收集器也并不是必需的,有的时候我们可以直接将遥测数据发送到外部的可视化工具中,比如 Jaeger、Zipkin 等等,但是这样的话我们就需要在每个应用中都进行配置,这样的话就会导致配置非常繁琐,而且也不利于统一管理,所以这里我们就可以使用 OpenTelemetry Collector 来解决这个问题。

而且 OpenTelemetry Collector 本身部署起来也非常灵活,可以将其部署为代理或网关。区别在于作为代理时,收集器实例与应用程序在同一主机上运行(sidecar 容器、daemonset 等)。此外一个或多个收集器实例也可以作为独立服务以每个集群、数据中心和地区的网关形式运行。

一般来说建议新应用选择代理部署,现有应用选择网关部署的方式,如果是 Kubernetes 环境,当然更建议部署为守护进程(代理模式)的方式。

收集器由四个组件组成,通过管道(Pipeline)进行启用:

  • 接收器(Receiver)将数据发送到收集器中,可以通过推送或拉取方式发送
  • 处理器(Processor)决定如何处理接收到的数据
  • 导出器(Exporter)决定将数据发送到哪里,可以通过拉取或推送方式完成,上面代码中的 OTLPTraceExporter 就是一个导出器
  • 连接器(Connectors):连接器既是输出者又是接收者。连接器连接两个管道:它作为一个管道末端的导出器消耗数据,并作为另一个管道开始处的接收器发出数据。它可以消耗和发出相同数据类型或不同数据类型的数据。

image.png

OpenTelemetry Collector 配置

OpenTelemetry Collector 有一个专门的配置文件,用于指定各个组件的配置,下面我们来了解下收集器的一些核心配置属性。

接收器(Receiver)

接收器可以通过推送或拉取方式发送数据,是数据进入收集器的方式,接收器可以支持一个或多个数据源。

OTel Collector 有一个专门的配置文件来配置各个组件,其中接收器就是通过 receivers 属性进行配置的。

许多接收器都带有默认设置,因此只需指定接收器的名称就足以对其进行配置(比如 zipkin:)。如果需要配置或者用户想要更改默认配置,则必须在该模块下面定义此类配置。

另外需要注意的是配置接收器并不会启用它,接收器需要通过配置文件中的 service 服务部分内的 pipelines 管道进行启用。


而且 必须配置至少一个接收器 ,默认情况下,没有配置接收器,下面是一个接收器的基本示例。

receivers:
  # Data sources: logs
  fluentforward:
    endpoint: 0.0.0.0:8006

  # Data sources: metrics
  hostmetrics:
    scrapers:
      cpu:
      disk:
      filesystem:
      load:
      memory:
      network:
      process:
      processes:
      paging:

  # Data sources: traces
  jaeger:
    protocols:
      grpc:
      thrift_binary:
      thrift_compact:
      thrift_http:

  # Data sources: traces
  kafka:
    protocol_version: 2.0.0

  # Data sources: traces, metrics
  opencensus:

  # Data sources: traces, metrics, logs
  otlp:
    protocols:
      grpc:
      http:

  # Data sources: metrics
  prometheus:
    config:
      scrape_configs:
        - job_name: otel-collector
          scrape_interval: 5s
          static_configs:
            - targets: [localhost:8888]

  # Data sources: traces
  zipkin:

上面的配置文件中就配置了不同的接收器,比如其中 zipkin接收器是用来接收 Zipkin 的数据的,而 otlp 接收器则是用来接收 OTLP 的数据的。