OpAMP管理协议(Open Agent Management Protocol)2023年国情报告

Open Agent Management Protocol (OpAMP) 是一种新兴的开放标准,用于在规模化环境下管理遥测代理的集群。2022年,Splunk将OpAMP捐赠给OpenTelemetry(OTel)项目,并在observIQ的反馈下进行了初步的改进,以在BindPlane中使用observIQ的自定义协议。OpAMP规范定义了一种用于远程管理代理集群的网络协议。这些代理可以是各种形式,从遥测代理(如OpenTelemetry Collector)到Fluent Bit,甚至是您在环境中使用的自定义代理。

在OpAMP中,我们区分服务器端和客户端端,通常在控制平面上托管服务器端,在您想要管理的相应代理中实现客户端端。例如,使用OpAMP来管理一组OpenTelemetry Collectors,可能需要以下步骤:

OpAMP高层概念:控制平面和代理

收集器将其状态报告给OpAMP控制平面,并接收来自OpAMP控制平面的配置。OpAMP协议是供应商不可知的和通用的(不是OTel特定的),因此OpAMP服务器可以远程监视和管理多种不同类型的代理集群。OpAMP目前支持,除其他功能外:

  • 代理(例如OpenTelemetry Collector)可以向服务器(OpAMP控制平面)报告其属性,例如类型和版本,或主机操作系统详细信息。
  • 服务器可以向代理推送配置,并确保应用这些配置,例如通过重新加载代理。
  • 您可以将代理自己的遥测(日志和指标)导入符合OTLP规范的可观测性后端。
  • 安全自动更新功能,用于升级和降级代理。
  • 内置的连接凭证管理,包括客户端TLS证书吊销和轮换。

现在我们已经对OpAMP是什么以及它支持的功能有了一个大致的了解,让我们来看一下它在OpenTelemetry Collector中的实现方式。

在与OTel终端用户和收集器贡献者的讨论中,我们发现他们希望既将OpAMP作为收集器扩展使用,提供有限的功能,又将其作为(收集器外部的)监管器使用,实现更广泛的OpAMP功能集。

同时支持这两种模式的主要思想是,在收集器中实现一个具有最小OpAMP功能集的扩展。这个收集器扩展可以独立使用,也可以用于创建一个外部Supervisor,该Supervisor使用该扩展作为助手,并根据该扩展实现剩余的OpAMP功能:

OpAMP监管器

让我们首先更仔细地研究一下收集器OpAMP扩展,然后再转向OpAMP监管器。

OpAMP扩展

OpenTelemetry Collector OpAMP扩展将在收集器内部实现一个OpAMP客户端,它将在独立模式和受监管模式下使用,通过OpAMP来对收集器实例进行管理。 OpAMP扩展的功能在与监管器一起工作时已被定义为监管器设计文档的一部分,其中扩展的主要任务是向监管器提供引导信息,并与收集器通信其有效配置。

OpAMP监管器

OpAMP监管器将作为一个单独的二进制文件存在,运行OpenTelemetry Collector实例,实现OpAMP客户端,将来自OpAMP服务器的配置转发给收集器,将远程和本地配置源合并到文件中,收集器可以在启动时使用。通过受监管模式来管理收集器还允许通过OpAMP协议下载其他二进制文件,以及更新收集器。

此外,如果OpAMP服务器发送给监管器一个“错误”的配置,并且收集器由于无法启动而失败,由于它作为一个独立进程运行,监管器可以与OpAMP服务器进行通信,通知它情况。除了实现OpAMP客户端之外,监管器还将在其中实现一个OpAMP服务器,用于与收集器中运行的OpAMP扩展通信,以获取有关收集器的信息。我们在一个设计文档中定义了监管器的功能,并根据该文档向opentelemetry-collector-contrib存储库贡献了一个初始实现,并创建了一系列问题以指导进一步的开发。

OpAMP在Kubernetes中的应用

在OTel中,我们通过OpenTelemetry Operator for Kubernetes为Kubernetes作为计算平台提供了专门的支持。在这个背景下,我们还正在开发在Kubernetes中支持OpAMP的功能,这将通过一个桥接组件通过OpenTelemetry Operator部署提供:

OTel运算符中的OpAMP桥接

OpAMP桥接是一个由OTel SIG Kubernetes Operator开发的二进制文件,负责在Kubernetes集群中维护OpenTelemetry Collector资源池。该桥接组件充当OpAMP中的操作员服务器的客户端,报告收集器池的有效配置,并支持对收集器池的远程配置。未来,该桥接组件将通过增强状态和改进健康检查来报告有关在Kubernetes中运行的收集器池的更丰富信息。您还可以扩展该桥接组件以支持遥测资源的远程配置。桥接组件的镜像已经构建并与OpenTelemetry Operator一起发布。此外,我们还正在开发一个方便的自定义资源定义(CRD),使您可以轻松地将桥接组件部署到Kubernetes集群中。

接下来是什么?

社区已经在开发OpAMP超过一年了,用户对它所承诺提供的机会感到非常兴奋。如果您在2023年11月6日至9日期间参加在芝加哥举行的KubeCon北美活动,请考虑在OpenTelemetry维护者展位上与我们会面,或者在许多与可观测性相关的活动中找到我们,例如可观测性日。我们非常有兴趣了解非OTel收集器的使用案例和要求。目前,如果您是供应商并且正在实施OpAMP规范,请提供反馈;如果您是终端用户,您可以尝试参考实现的服务端、监管器和简单UI,方法请遵循OTel文档中的OpAMP入口,或者深入了解OTel收集器中的监管器代码(Go代码)