构建自定义收集器

如果您计划构建和调试自定义收集器接收器、处理器、扩展或导出器,您将需要自己的收集器实例。这将使您能够在您喜欢的 Golang IDE 中直接启动和调试您的 OpenTelemetry 收集器组件。 使用这种方法进行组件开发的另一个有趣方面是,您可以使用 IDE 提供的所有调试功能(堆栈跟踪是很好的教师!)来了解收集器本身与您的组件代码的交互方式。

OpenTelemetry 社区开发了一个名为OpenTelemetry Collector 构建器(或 ocb)的工具,以帮助人们组装自己的发行版,简化构建包含自定义组件和公开可用组件的发行版的过程。

在此过程中,builder将生成收集器的源代码,您可以使用它来帮助构建和调试自己的自定义组件,所以让我们开始吧。

第一步 - 安装构建器

ocb 二进制文件可以从OpenTelemetry 收集器发布页面中作为可下载资源获取。您将在页面底部找到资源列表。资源的命名基于操作系统和芯片组,因此请选择适合您配置的那个进行下载。

该二进制文件的名称非常长,所以您可以将其简单重命名为 ocb;如果您在运行 Linux 或 macOS,则还需要为二进制文件提供执行权限。

打开您的终端并输入以下命令执行这两个操作:

mv ocb_0.88.0_darwin_amd64 ocb
chmod 777 ocb

为确保 ocb 已准备好使用,转到终端并键入 ./ocb help,然后按回车键,您应该在控制台中看到 help 命令的输出。

第二步 - 创建构建器清单文件

构建器的 manifest 文件是一个 yaml 文件,您在其中传递有关代码生成和编译过程的信息,同时还包含要添加到收集器发行版中的组件。

manifest 以名为 dist 的映射开始,其中包含帮助您配置代码生成和编译过程的标记。实际上,dist 下的所有标记都等价于 ocb 命令行的 flags

下面是 dist 映射的标记:

标记 描述 可选 默认值
module: 新发行版的模块名称,遵循 Go 模块约定。可选,但建议填写。 go.opentelemetry.io/collector/cmd/builder
name: 您的发行版的二进制名称 otelcol-custom
description: 应用程序的长名称 自定义 OpenTelemetry 收集器发行版
otelcol_version: 用于作为发行版基础的 OpenTelemetry 收集器版本。 0.88.0
output_path: 用于写入输出(源代码和二进制文件)的路径。 /var/folders/86/s7l1czb16g124tng0d7wyrtw0000gn/T/otelcol-distribution3618633831
version: 自定义 OpenTelemetry 收集器的版本。 1.0.0
go: 用于编译生成的源代码的 Go 二进制文件。 PATH 中的 go

如上表所示,dist 下的所有标记都是可选的,因此您将根据自己的意图为它们添加自定义值,具体取决于您是要将自己的自定义收集器发行版提供给其他用户使用,还是仅使用 ocb 来启动组件开发和测试环境。

在本教程中,您将创建一个收集器发行版,以支持组件的开发和测试。

继续创建一个名为 builder-config.yaml 的清单文件,并使用以下内容填充它:

builder-config.yaml

dist:
  name: otelcol-dev
  description: 开发人员的基本 OTel Collector 发行版
  output_path: ./otelcol-dev

现在,您需要添加代表您想要包含在此自定义收集器发行版中的组件的模块。请查看ocb 配置文档以了解不同的模块以及如何添加组件。

我们将向我们的开发和测试收集器发行版添加以下组件:

  • 导出器:OTLP 和 Debug1
  • 接收器:OTLP
  • 处理器:Batch

在添加上述组件的模块后,下面是我 builder-config.yaml 清单文件的内容:

dist:
  name: otelcol-dev
  description: 开发人员的基本 OTel Collector 发行版
  output_path: ./otelcol-dev
  otelcol_version: 0.88.0

exporters:
  - gomod:
      # 在 v0.86.0 之前,请使用 `loggingexporter` 而非 `debugexporter`。
      go.opentelemetry.io/collector/exporter/debugexporter v0.88.0
  - gomod:
      go.opentelemetry.io/collector/exporter/otlpexporter v0.88.0

processors:
  - gomod:
      go.opentelemetry.io/collector/processor/batchprocessor v0.88.0

receivers:
  - gomod:
      go.opentelemetry.io/collector/receiver/otlpreceiver v0.88.0

第三步 - 生成代码并构建您的收集器发行版

现在,您只需要让 ocb 做它的工作,因此转到您的终端,并输入以下命令:

./ocb --config builder-config.yaml

如果一切顺利,该命令的输出应如下所示:

2022-06-13T14:25:03.037-0500	INFO	internal/command.go:85	OpenTelemetry Collector distribution builder	{"version": "0.88.0", "date": "2023-01-03T15:05:37Z"}
2022-06-13T14:25:03.039-0500	INFO	internal/command.go:108	Using config file	{"path": "builder-config.yaml"}
2022-06-13T14:25:03.040-0500	INFO	builder/config.go:99	Using go	{"go-executable": "/usr/local/go/bin/go"}
2022-06-13T14:25:03.041-0500	INFO	builder/main.go:76	Sources created	{"path": "./otelcol-dev"}
2022-06-13T14:25:03.445-0500	INFO	builder/main.go:108	Getting go modules
2022-06-13T14:25:04.675-0500	INFO	builder/main.go:87	Compiling
2022-06-13T14:25:17.259-0500	INFO	builder/main.go:94	Compiled	{"binary": "./otelcol-dev/otelcol-dev"}

根据配置文件的 dist 部分的定义,您现在有一个名为 otelcol-dev 的文件夹,其中包含您的收集器发行版的所有源代码和二进制文件。

现在,您可以使用生成的代码来启动您的组件开发项目,并轻松地构建和分发带有您的组件的自己的收集器发行版。


  1. 在 v0.86.0 之前,请使用 loggingexporter 而非 debugexporter。 ↩︎

最后修改 December 10, 2023: translate (a4350d6e)