向 Ceilometer 发送传感器数据

https://blueprints.launchpad.net/ironic/+spec/send-data-to-ceilometer

此蓝图将定义传感器数据收集接口,并实现基于 IPMI 的驱动程序来收集传感器数据并将其发送到 Ceilometer。

问题描述

Ceilometer 需要从受监控的物理节点收集硬件级别的性能/状态数据。Ironic 拥有 IPMI 凭据,因此 Ironic 可以轻松获取 IPMI 传感器数据并通过 OpenStack 通用 AMQP 通知总线发送到 Ceilometer。

提议的变更

  • 创建一个新的 ironic.driver.base.ManagementInterface 通用方法 get_sensors_data 用于收集硬件传感器数据

    def get_sensors_data(self, task)

    “”” 从物理节点获取传感器数据

    此方法 get_sensors_data() 将返回一个字典,该字典是支持 IPMI 和非 IPMI 传感器的通用数据结构,如下所示:‘传感器类型’ -> ‘传感器 ID’ -> ‘字段’:‘值’。传感器的当前读数应在‘传感器读数’字段中找到。

    返回:

    一个一致的传感器数据字典格式,按传感器类型分组,Ceilometer 可以处理它。

    “””

    实际消息示例: http://paste.openstack.org/show/85130/

  • 将接口实现到‘ipmitool’驱动程序中,通过 IPMI 命令调用来收集数据。

    我们调用 IPMI 命令‘ipmitool sdr -v’来检索传感器数据。使用‘-v’选项,我们可以获取完整的传感器数据,包括扩展的传感器信息和‘传感器读数’字段中的当前值。

    这是一个命令返回结果的示例

    http://paste.openstack.org/show/63267/

    因此,我们可以将结果转换为按‘传感器类型’分组的字典格式。对于不同的类型,我们有不同的字段名称。默认情况下,IPMI 节点可以支持三种基本类型:‘风扇’、‘温度’和‘电压’。

    将没有‘传感器读数’字段的非变化传感器将被过滤掉,并且不会发送到 Ceilometer。

  • 向 conductor 添加周期性任务,以一定的间隔向 Ceilometer 发送通知。

    将在 ironic.conductor.manager 中添加新的 periodic_task 方法 _send_sensor_data。它为所有已部署的节点调用 get_sensor_data。如果 get_sensor_data 返回 None(未实现),则不发送任何内容。

    支持配置选项

    conductor.send_sensor_data - 布尔值,是否启用收集和发送传感器数据,默认值为 False。

    conductor.send_sensor_data_interval - Conductor 通过 AMQP 通知总线向 Ceilometer 发送传感器数据消息的秒数。默认值为 600。

    这是将发送到 Ceilometer 的示例消息

    http://paste.openstack.org/show/85053/

  • 支持‘send_sensor_data_types’配置选项,我们可以列出用户想要发送的数据类型,这将允许人们调整他们想要消耗的数据类型,而不会浪费带宽发送所有内容。默认情况下,我们可以发送所有内容。示例

    • 默认选项设置

      send_sensor_data_types=ALL #默认情况下,发送所有具有‘传感器读数’字段的传感器,Ceilometer 需要这些传感器。

    • 对于自定义设置

      send_sensor_data_types=Temperature,Fan,Voltage,Current #与传感器数据‘传感器类型’字段值匹配。

备选方案

  • 另一种方法是,我们可以启用我们的‘ipminative’驱动程序来支持 IPMI 传感器数据收集,使用 pyghmi lib get_sensor_data 命令方法调用来访问 IPMI 节点。

    但是,这个 get_sensor_data 是最近发布中引入的一个新命令,现在还不稳定。我用物理服务器进行了一些测试,它仍然无法工作,一些 IPMI 传感器原始数据无法被 get_sensor_data 命令解析。

    因此,我们将在稍后使用单独的规范支持‘ipminative’驱动程序。

  • 对于与 Ceilometer 的接口,我们有另一种方法可以直接调用 Ceilometer API,以避免不太安全的 AMQP 媒介。

  • 我们可以允许传感器类型可配置,以便它只会收集感兴趣的传感器数据。默认值可以是所有传感器。这可以是一个可选功能,一些 Ironic 驱动程序(IPMI 驱动程序或非 IPMI 供应商驱动程序)可以选择稍后使用单独的规范来支持它。

  • 另一种方法是,Ceilometer 可以主动拉取 Ironic API get_sensors_data 来检索传感器数据。

数据模型影响

REST API 影响

管理接口将公开新的方法 get_sensors_data。用户可以调用此 api 来检索传感器数据。

驱动程序 API 影响

将在 ironic.driver.base.ManagementInterface 中添加一个名为 get_sensors_data 的新函数。

Nova 驱动程序影响

安全影响

我们通过 AMQP 发送通知,AMQP 介导的交互被假定为安全的。

其他最终用户影响

可扩展性影响

性能影响

关于周期性任务有一些性能影响,它们在单个 greenthread 中一个接一个地运行。因此,像这样探测 BMC 的周期性任务会影响其他等待运行的周期性任务的 timing。

其他部署者影响

开发人员影响

实现

负责人

主要负责人

Haomeng, Wang(LP ID == whaom)

其他贡献者

与 Ceilometer 团队开发人员 Chris Dent (LP ID == chdent) 合作

工作项

  • ironic.drivers.base.ManagementInterface 中添加一个新的函数接口,get_sensors_data

  • ipmitool 驱动程序中添加支持,以调用 IPMI 命令来获取传感器数据。

  • 向 conductor 添加周期性任务,以默认间隔发送数据。

依赖项

Ironic 定义的数据通知结构应与 Ceilometer 团队确认,以便他们也能使用这些通知。

因此,将与 Ceilometer 团队合作,并根据需要修复结构。

测试

我们将至少有单元测试。但是对于使用物理服务器集成的 IPMI 数据收集,我们很难在 CI 中进行真实测试。

文档影响

文档将扩展,以解释其工作原理、支持的驱动程序以及如何启用它。

参考资料