内容提要
OpenTelemetry Collector有两个官方发行版:Core和Contrib。Core是基础发行版,供开发人员进行开发和测试;Contrib是扩展版,供非开发人员实验和学习。可以使用OpenTelemetry Collector Builder (OCB)工具来自定义附件。构建清单是对Collector的描述,包含基本信息、集成的组件等。可以通过添加组件来构建自己的发行版。构建好的二进制文件可以用于构建容器镜像。
延伸解读
为何需要自定义发行版
官方 Core 和 Contrib 发行版均不适合直接用于生产环境。Core 组件过于基础,难以满足实际需求;Contrib 虽然组件丰富,但包含大量冗余组件,不仅使 Collector 臃肿,还扩大了潜在攻击面。因此,根据自身需求构建定制发行版,只集成必要的组件,是更安全、高效的选择。
OCB 工具与构建清单
OpenTelemetry Collector Builder (OCB) 是一个跨平台 CLI 工具,用于生成自定义 Collector 二进制文件。通过 --config 参数指定构建清单(YAML 格式),清单中需定义发行版基本信息(dist)以及要包含的 receivers、exporters、extensions、processors 和 connectors 列表。可以从官方仓库获取 Core 的清单作为模板,按需增删组件。
从二进制到容器镜像
使用 OCB 构建成功后,会在 output_path 指定的目录生成二进制文件。若要构建容器镜像,可编写 Dockerfile,例如基于 golang 镜像安装 OCB 并执行构建,再将生成的二进制文件复制到轻量基础镜像(如 distroless)中。注意暴露 Collector 所需的端口,如 OTLP 接收器的 4317 端口。
Q&A
OpenTelemetry Collector 的 Core 和 Contrib 发行版有什么区别?
Core 是基础发行版,供 OTel 开发人员进行开发和测试,包含基本的扩展、连接器、接收器、处理器和导出器。Contrib 是扩展版,供非 OTel 开发人员进行实验和学习,包含由第三方创建的组件,扩展了 Core 发行版。
为什么 Core 和 Contrib 发行版都不适合用于生产环境?
Core 本身太过简单,无法满足组织的需求;Contrib 虽然组件全面,但包含太多冗余组件,显得臃肿,还增大了攻击面。
如何自定义 OpenTelemetry Collector 发行版?
可以使用官方提供的 OpenTelemetry Collector Builder (OCB) 工具来自定义发行版。通过编写构建清单(builder-config.yaml)指定所需的组件,然后运行 OCB 命令构建二进制文件。
OpenTelemetry Collector Builder (OCB) 是什么?如何安装?
OCB 是一个支持多平台的 CLI 工具,用于构建自定义的 OpenTelemetry Collector 发行版。可以从 release 页面下载二进制文件,或通过 go install 安装:go install go.opentelemetry.io/collector/cmd/builder@latest。
构建清单(builder-config.yaml)包含哪些部分?
构建清单通常包含:dist(发行版基本信息)、receivers(接收器列表)、exporters(导出器列表)、extensions(扩展列表)、processors(处理器列表)和 connectors(连接器列表)。
如何基于 Core 发行版的构建清单进行裁剪?
可以从 GitHub 仓库找到 Core 发行版的构建清单,基于该版本进行裁剪,去掉不需要的组件(如 replace 部分),并添加自己需要的组件,例如在 exporters 中添加 lokiexporter。
构建自定义 OpenTelemetry Collector 容器镜像的步骤是什么?
首先使用 OCB 构建二进制文件,然后编写 Dockerfile,使用多阶段构建:第一阶段使用 golang 镜像安装 OCB 并构建二进制,第二阶段将二进制复制到基础镜像(如 distroless)中,并暴露所需端口。