Configuration

概述

参考:

顶层字段

  • receivers(map[STRING]receivers) # 配置 Receivers 管道组件
  • processors(map[STRING]processors) # 配置 Processors 管道组件
  • exporters(map[STRING]exporters) # 配置 Exporters 管道组件
  • extensions(map[STRING]extensions) # 配置 扩展
  • connectors(map[STRING]connectors) # TODO: 配置 Connectors 管道组件
  • service(service) # 配置在处理各类可观测数据时,使用哪些扩展、使用哪些组件。每个 service 可以简单理解为一个 Pipeline(管道)。

otelcol/config.go 可以看到顶层字段的 struct

// Config defines the configuration for the various elements of collector or agent.
type Config struct {
 // Receivers is a map of ComponentID to Receivers.
 Receivers map[component.ID]component.Config `mapstructure:"receivers"`

 // Exporters is a map of ComponentID to Exporters.
 Exporters map[component.ID]component.Config `mapstructure:"exporters"`

 // Processors is a map of ComponentID to Processors.
 Processors map[component.ID]component.Config `mapstructure:"processors"`

 // Connectors is a map of ComponentID to connectors.
 Connectors map[component.ID]component.Config `mapstructure:"connectors"`

 // Extensions is a map of ComponentID to extensions.
 Extensions map[component.ID]component.Config `mapstructure:"extensions"`

 Service service.Config `mapstructure:"service"`
}

Notes: map 中的 key 用来表示组件 ID。在 component/identifiable.go 和 文档中 可以看到,定义组件 ID 遵循 TYPE[/NAME] 格式,e.g. otlp 或 otlp/2。只要 ID 是唯一的,就可以多次定义给定种类的组件。例如:

receivers:
  otlp:
    protocols:
      grpc:
        endpoint: 0.0.0.0:4317
      http:
        endpoint: 0.0.0.0:4318
  otlp/2:
    protocols:
      grpc:
        endpoint: 0.0.0.0:55690

processors:
  batch:
  batch/test:

exporters:
  otlp:
    endpoint: otelcol:4317
  otlp/2:
    endpoint: otelcol2:4317

extensions:
  health_check:
  pprof:
  zpages:

service:
  extensions: [health_check, pprof, zpages]
  pipelines:
    traces:
      receivers: [otlp]
      processors: [batch]
      exporters: [otlp]
    traces/2:
      receivers: [otlp/2]
      processors: [batch/test]
      exporters: [otlp/2]
    metrics:
      receivers: [otlp]
      processors: [batch]
      exporters: [otlp]
    logs:
      receivers: [otlp]
      processors: [batch]
      exporters: [otlp]

TYPE 可用的字符串可以参考 Collector Collector component,像下图,在 opentelemetry-collector、opentelemetry-collector-contrib 项目中,在对应的组件目录下,每个目录都是一个可用的 TYPE,目录名的前缀就是 TYPE,比如 otlpreceiver 是 OTLP Receiver(TYPE 是 otlp),prometheusreveiver 是 Prometheus Receiver(TYPE 是 prometheus),以此类推。

image.png

receivers

配置内容取决于使用的 Receiver 类型

processors

配置内容取决于使用的 Processor 类型

exporters

配置内容取决于使用的 Exporter 类型

connectors

配置内容取决于使用的 Connector 类型

service

https://github.com/open-telemetry/opentelemetry-collector/blob/v0.126.0/service/config.go#L13

extensions([]STRING)

pipelines(map[STRING]pipelines) # 定义管道。map 中的 key 是管道 ID,也遵循 TYPE[/NAME] 格式。TYEP 可以用的值有: traces, metrics, logs

telemetry(Object) # 配置 Collector 本身的与组件无关的配置。e.g. 内部指标暴露端口、日志级别、etc.

pipelines

receivers([]CommandID)

processors([]CommandID)

exporters([]CommandID)

配置示例

将本地文件日志写入到 Loki 的最简单配置

receivers:
  filelog:
    include: [/var/log/syslog]

exporters:
  otlphttp/loki:
    endpoint: http://localhost:3100/otlp

service:
  pipelines:
    logs:
      receivers: [filelog]
      processors: []
      exporters: [otlphttp/loki]

最后修改 May 26, 2025: firewalld (bb04e962)