AWS 提供了一些监控服务,包括 Amazon CloudWatch、Amazon X-Ray、Amazon OpenSearch Service 和 Amazon Managed Prometheus。ADOT(AWS Distro for OpenTelemetry)允许将你自定义的应用程序的遥测数据发送至这些服务。
除了介绍 OpenTelemetry Collector 的一般性描述外,本文还详细讲解了 ADOT。
TL;DR (要点)ADOT 是专为 AWS 打造的 OpenTelemetry Collector 的分发版本,内含使用 AWS 及其合作伙伴解决方案所需的所有组件。如果您希望更灵活地使用 OpenTelemetry Collector,建议进行自定义构建。
OpenTelemetry是什么?这是一个图片链接,点击可以查看图片。
尽管我知道许多 AWS 用户已经在使用 OpenTelemetry,但为了确保,我简单说一下,这是一个 CNCF 旗下的项目。它旨在统一系统中遥测数据的采集、收集和导出标准。
OpenTelemetry Collector 是什么?OpenTelemetry Collector(以下简称“Collector”)是一个正在被 OpenTelemetry 项目定义和开发参考实现的代理工具,用于对 telemetry 进行仪器化、收集和导出。参考实现作为一个单一的二进制文件运行,并用 Go 语言编写。
它由接收器、处理器、和输出器三个主要组件组成,并且在分发前,所需组件被指定并合并成一个单一的二进制。
- 接收器:其职责是接收遥测数据
- 处理器:其任务是处理并暂存遥测数据
- 发送端:其任务是将遥测数据传输到后端
二进制文件中的组件可以在配置文件中自由配置链接,但链接方向必须是接收器 -> 处理器 -> 导出器。在管道中,每个接收器或导出器只能链接一次,而处理器则可以多次嵌入。
例如,以下配置文件展示了接收遥测,通过 OTLP 进行接收,在使用 batch
和 memory_limiter
处理程序调整发送遥测的流量后,再通过 OTLP 发送遥测。
receivers:
otlp:
processors:
batch:
memory_limiter:
limit_mib: 1536
spike_limit_mib: 512
check_interval: 5s
exporters:
otlp:
service:
pipelines:
metrics:
receivers: [otlp]
processors: [memory_limiter, batch]
exporters: [otlp]
全屏显示 退出全屏
收集器的源代码可在GitHub仓库中找到,具体位置是open-telemetry/opentelemetry-collector
和 open-telemetry/opentelemetry-collector-contrib
,每个组件的源代码都在相应的仓库里。此外,他们还提供了多个预构建的收集器二进制文件,可以在这里下载,这些二进制文件也是官方OpenTelemetry项目版本的一部分,以及附带的OCI容器,这些容器已经安装好。
截至2025年2月为止,共有四种不同的版本可供官方提供的收藏家使用,具体取决于所包含组件的不同类型。
otelcol-otlp
:仅能接收和发送 OTLP 的二进制文件。文件大小很小,但功能几乎为空。otelcol
:支持 OpenTelemetry 项目应该支持的所有开源软件 (OSS) 的二进制文件。otelcol-k8s
:在otelcol
的基础上增加了 Kubernetes 相关组件的二进制文件。otelcol-contrib
:这是一个包含 OpenTelemetry 项目管理的所有组件的二进制文件。文件大小很大,可以使用所有组件,包括那些用于 Observability SaaS 的组件。
若想使用 AWS 组件,使用官方提供的收集器实现这一点的唯一方法是使用 otelcol-contrib
。然而,这样做会浪费一个大型二进制文件,因为它包含了太多不必要的组件。因此,AWS 提供了一个叫作 ADOT 的 Collector 分发版。
ADOT 预先构建并分发了官方 otelcol 分发版本中使用的组件,以及一些有助于使用 AWS 服务和合作伙伴 SaaS 解决方案的更多相关组件。这些二进制文件可以被 Amazon ECS、AWS Lambda 等调用。
对于在 AWS 上使用 OpenTelemetry 的基本用法,ADOT 是首选。
自定义收藏家搭建在 AWS 上,推荐使用 ADOT Collector,但 ADOT 包含一些你可能不会用到的组件。如果你希望更深入地使用 OpenTelemetry,你可能不想使用这些多余的组件,或者相反,你可能希望使用 ADOT 未包含的一些组件。例如,将分布式跟踪跨度转换为指标的 Span Metrics Connector 就未包含在 ADOT 中。对于这类高级用例,可以考虑使用 OpenTelemetry Collector 构建器 (ocb)。
ocb 是一个方便的工具,允许你根据 YAML 文件中的配置来构建 Collector 二进制文件,该文件以 Go 包名的形式列出你需要的组件,例如。例如,如果你只想使用以下组件来构建 collector,你需要创建名为 otelcol-foo.yaml 的 YAML 文件。
dist:
name: otelcol-foo
description: 这是一个为项目foo的AWS账户定制的OpenTelemetry收集器
output_path: ./otelcol-foo
receivers:
- gomod: go.opentelemetry.io/collector/receiver/otlpreceiver v0.119.0
processors:
- gomod: go.opentelemetry.io/collector/processor/batchprocessor v0.119.0
- gomod: go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.119.0
exporters:
- gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsemfexporter v0.119.0
进入全屏 切换出全屏
通过使用此 YAML 文件并执行 ocb 命令,可以构建一个自定义的 Collector
运行这个命令:`./ocb --config otelcol-foo.yaml`
点击此处进入全屏,点击此处退出全屏
最后: 结论希望这篇文章能帮助你更深入地理解ADOT的内容,ADOT随着OpenTelemetry的发展而演变,每个版本中ADOT的内容都有所变化。不过,ADOT仅仅是一个自定义构建,所以只要你知道它是什么,就没什么好担心的。希望这能帮助你在项目中选择最适合的收集器。
在高级应用场景中,会用到名为“Connector”(连接器)的组件,它将导出器的遥测数据回传到接收端。因为本文主要解释Collector(采集器)的基本概念,所以省略了这部分的细节。 ↩
-
每个二进制构建版本的清单文件(manifest)可以在
open-telemetry/opentelemetry-collector-releases
代码库中找到。(otelcol-otlp
,otelcol
,otelcol-k8s
,otelcol-contrib
) - ADOT 中包含的组件列表可以在仓库的 README 中查看,而实际的组件则可以在 Go 源代码 中查看。↩
共同學(xué)習(xí),寫下你的評論
評論加載中...
作者其他優(yōu)質(zhì)文章