Open Agent Management Protocol (OpAMP) 2023 年现状
博客文章在发布后不会更新。这篇文章已经发布一年多了,其内容可能已过时,部分链接可能无效。在依赖任何信息之前,请务必核实。
Open Agent Management Protocol (OpAMP) 是新兴的开放标准,用于大规模管理遥测代理程序。2022 年,Splunk 将 OpAMP 捐赠给了 OpenTelemetry (OTel) 项目,最初由 observIQ 提供反馈,该协议基于 observIQ 在 BindPlane 中使用的自定义协议。OpAMP 规范 定义了用于远程管理代理程序集群的网络协议。这些代理程序可以是任何东西,从遥测代理程序(如 OpenTelemetry Collector)到 Fluent Bit,再到您可能在环境中使用的自定义代理程序。
在 OpAMP 中,我们区分服务器端(通常托管在控制平面中)和客户端(在您要管理的相应代理程序中实现)。例如,使用 OpAMP 管理 OpenTelemetry Collector 集群可能看起来像下面的示例
Collector 向 OpAMP 控制平面报告其状态并从控制平面接收配置。OpAMP 协议是厂商无关且通用的(非 OTel 特定),因此 OpAMP 服务器可以远程监控和管理各种代理程序集群。OpAMP 目前支持(但不限于)
- 代理程序(如 OpenTelemetry Collector)可以将其属性报告给服务器(OpAMP 控制平面),例如类型和版本,或者主机操作系统详细信息。
- 服务器可以向代理程序推送配置,并确保应用了所述配置,例如通过重新加载代理程序。
- 您可以将代理程序的自身遥测数据(日志和指标)摄取到符合 OTLP 的可观测性后端。
- 代理程序的安全自动更新功能,包括升级和降级。
- 内置连接凭据管理,包括客户端 TLS 证书吊销和轮换。
现在我们对 OpAMP 的作用及其支持的功能有了大致了解,让我们来看看它在 OpenTelemetry Collector 中的实现方式。
在与 OTel 最终用户和 Collector 贡献者的讨论中,我们发现他们希望将 OpAMP 用作功能受限的 Collector 扩展,以及用作实现更广泛 OpAMP 功能的(Collector 外部)监督程序。
有关更深入的探讨,请参阅 OpAMP for OpenTelemetry Collector 文档,该文档描述了如何在最小化代码重复的同时实现这两种选项。
支持这两种模式的主要思路是在 Collector 中实现一个具有最小 OpAMP 功能集的扩展。此 Collector 扩展可以单独使用,也可以用于创建外部监督程序,该监督程序使用所述扩展作为助手,并在扩展实现的功能之上实现其余的 OpAMP 功能。

让我们先仔细看看 Collector OpAMP 扩展,然后再继续讨论 OpAMP 监督程序。
OpAMP 扩展
OpenTelemetry Collector OpAMP 扩展将实现 Collector 内的 OpAMP 客户端,并将用于独立和监督模型,通过 OpAMP 管理 Collector 实例。OpAMP 扩展在与监督程序协作时所需的功能已在监督程序的设计文档中定义,其中扩展主要负责向监督程序提供引导信息并传达 Collector 的有效配置。
OpAMP 监督程序
OpAMP 监督程序将作为一个独立的二进制文件运行 OpenTelemetry Collector 实例,并实现 OpAMP 客户端,通过将远程和本地配置源合并到 Collector 启动时使用的文件中,来从中继 OpAMP 服务器的配置到 Collector。管理 Collector 的监督模型还将允许通过 OpAMP 协议下载其他二进制文件,从而能够下载其他文件以及更新 Collector。
此外,如果 OpAMP 服务器发送了“坏”配置并且 Collector 无法启动,由于它作为一个单独的进程运行,监督程序可以与 OpAMP 服务器通信以通知其情况。除了实现 OpAMP 客户端之外,监督程序还将实现一个 OpAMP 服务器,它将与 Collector 中运行的 OpAMP 扩展通信以接收有关 Collector 的信息。我们在设计文档中定义了监督程序的功能,并基于此,我们在opentelemetry-collector-contrib 仓库中贡献了一个初始实现,并创建了待办事项列表以指导后续开发。
Kubernetes 中的 OpAMP
在 OTel 中,我们通过 OpenTelemetry Operator for Kubernetes 为 Kubernetes 作为计算平台提供了专门的支持。在此背景下,我们也在致力于为 Kubernetes 添加 OpAMP 支持,这将通过由 OpenTelemetry Operator 部署的 桥接组件 来实现。

目前,我们还没有支持通过 Helm chart 进行部署,但是,如果您想为此做出贡献,我们非常欢迎。
OpAMP 桥接程序是 OTel SIG Kubernetes Operator 开发的一个二进制文件,负责在 Kubernetes 集群中维护 OpenTelemetry Collector 资源的池。该桥接程序充当 OpAMP 操作服务器的客户端,报告 Collector 池的有效配置,并实现 Collector 池的远程配置。未来,该桥接程序将通过增强的状态和改进的运行状况检查报告有关 Kubernetes 中运行的 Collector 池的更丰富信息。您还可以扩展该桥接程序以支持遥测资源的远程配置。桥接程序的镜像已构建并随 OpenTelemetry Operator 一起发布。此外,我们正在开发一个方便的 Custom Resource Definition (CRD),它将使您能够轻松地将桥接程序部署到 Kubernetes 集群中。
下一步?
社区已经围绕 OpAMP 工作了一年多,用户们对其承诺的机遇感到兴奋。如果您在 2023 年 11 月 6 日至 9 日期间来到美国芝加哥的 KubeCon NA,请考虑在 OpenTelemetry 维护者展位拜访我们,或者在任何与可观测性相关的活动中找到我们,例如 Observability Day。我们也非常乐意了解您关于非 OTel Collector 的用例和需求。目前,如果您是供应商并且正在实现 OpAMP 规范,请提供反馈;作为最终用户,您可能希望通过按照 OTel 文档中的 OpAMP 入口中的步骤来试用服务器、监督程序和简单 UI 的参考实现,或者甚至深入了解 OTel Collector 中的 监督程序代码(Go 语言)。