Proposed new library oslo.metrics¶
这是一个创建新库以收集 oslo 库指标的提案。
Proposed library mission¶
oslo.metrics 的使命是暴露 oslo 库的内部指标信息。OpenStack 进程使用 oslo 库创建与其他中间件的连接,例如 oslo.messaging 连接另一个 OpenStack 进程,oslo.db 连接数据库。oslo.messaging 在与 RabbitMQ 的连接之上创建自己的 RPC 协议,RabbitMQ 是 OpenStack 项目中默认的消息中间件。RabbitMQ 的使用情况可以通过 RabbitMQ 管理工具进行监控,但 oslo.messaging 的 RPC 使用情况无法监控。使 OpenStack 管理员和操作员能够监控 oslo 库的使用情况是 oslo.metrics 的目标。
oslo.metrics 的首要目标是支持 oslo.messaging 的 RPC 指标。RPC 的指标信息在任何地方都没有显示。例如,当用户调用 Nova 的创建新实例 API 时,没有关于进行了多少 RPC 调用、使用了哪些 RPC 目标等信息。还有另一种情况,如果操作员将其 OpenStack 集群中添加 10 个计算节点,RPC 会增加多少,等等。
Consuming projects¶
有两种类型的消费者。一种是使用 oslo.messaging 作为其内部通信的 OpenStack 服务。另一种是消耗 oslo.metrics 暴露的指标的监控系统。
Alternatives library¶
如果 oslo.messaging 暴露其指标,oslo.messaging 的通知功能可以作为替代方案之一。但是,通知也是通过 RabbitMQ 实现的。这使得指标中的交叉引用,因此这样做不是一个好主意。
rpc_monitor 也是另一种替代方案。该库专注于收集 oslo.messaging 指标,并将其暴露给 Prometheus。rpc_monitor 已经很长时间没有开发了。而且 oslo.metrics 将支持多种类型的监控系统作为官方库。因此,很难使用 rpc_monitor 本身。但是,rpc_monitor 的目标与 oslo.metrics 的首要目标相似。在实现 oslo.metrics 的 Prometheus 支持时,最好参考 rpc_monitor 的实现。
Proposed adoption model/plan¶
基本架构是 oslo.metrics 作为外部系统的指标数据序列化器。现有的 oslo 库通过 unix socket 发送原始指标信息,然后 oslo.metrics 收集指标信息并暴露数据。
oslo.metrics 监听 unix socket 以接收来自每个 OpenStack 进程的指标数据。oslo.metrics 使用 socket 的原因是收集同一节点上运行的多个进程的 messaging 指标信息。一个指标进程代表一个节点或一个 OpenStack 项目。
oslo.metrics 的消费者,例如 oslo.messaging,需要将其指标信息发送到 unix socket。olso.messaging 将其指标数据发送到 socket 以及实际的 RPC 请求到另一个 oslo.messaging 服务器。指标数据发送功能通过 oslo.messaging 库中的新标志进行配置。
如果我们有一个控制服务器,那么在控制器中运行的 Neutron-Server 和 Nova-API 将共享其指标到一个 unix socket,该 socket 可以从其他 OpenStack 进程获取数据。在单个节点上运行的 Unix Socket 将处理该节点的所有 OpenStack 进程
oslo.messaging 以逐个的方式将 RPC 信息发送到 oslo.metrics,采用 oslo.metrics 的格式。oslo.messaging 发送的所有信息都将组合成 oslo.metrics 中的一个指标数据。然后 oslo.metrics 将该数据暴露给任何监控系统。
监控系统真正取决于操作员。因此,oslo.metrics 以通用格式暴露数据。事实上的标准是 Prometheus 暴露格式。我们决定使用此格式并在 HTTP 端点上暴露指标。它允许与大多数监控系统集成,例如 Prometheus 或 Monasca。
oslo.messaging 发送到 oslo.metrics 的数据包括但不限于
topic
namespace
version
server
fanout
timeout
call 类型:call 或 cast
调用的时间戳
project_id
Hostname 由 oslo.metrics 侧添加。
注意
实际的信息模式正在进行中,并且可以在实现期间更改。
+--------------+ +--------------+ +-------------+
| | | | | any |
|oslo.messaging+--------> oslo.metrics <-----> monitoring |
| | | | | system |
+--------------+ +--------------+ +-------------+
unix socket
Security Concerns¶
oslo.metrics 暴露的指标信息可能包含敏感信息,应将其与普通用户隔离。oslo.metrics 是一个管理工具,预计将在隔离的内部网络内工作。隔离的网络通常具有来自普通用户访问的另一个安全保护。由于这种安全保护,此敏感信息不会暴露给普通用户或云的最终用户。
Reviewer activity¶
对于 oslo.messaging 中的更改,需要 oslo.messaging 核心的支持。对于 oslo.metrics,Large Scale SIG 的成员可以审查补丁。
性能影响¶
oslo.metrics 请求 oslo.messaing 发送另一条信息。这可能会对 RPC 请求造成性能影响。在实现第一个规范后,此库应测试附加信息发送对性能造成的影响程度。
实现¶
工作项¶
创建一个名为 oslo.metrics 的新库 * 该实现包括单元测试和功能测试以及其代码
更改 oslo.messaging 以支持指标发送
调查 oslo.messaging RPC 的性能影响
参考资料¶
Large-Scale SIG 中的讨论:https://etherpad.openstack.org/p/large-scale-sig-cluster-scaling
Mirantis rpc_monitor:https://github.com/Mirantis/rpc_monitor
修订历史¶
发布名称 |
描述 |
|---|---|
Ussuri |
引入 |
注意
本作品采用知识共享署名 3.0 非移植许可协议授权。 http://creativecommons.org/licenses/by/3.0/legalcode