声明式 SNMP 指标

https://blueprints.launchpad.net/ceilometer/+spec/declarative-snmp-metrics

此蓝图旨在添加一种机制,以便我们可以以声明式的方式添加新的 SNMP 指标,而不是为新的轮询器编写新的源代码。

问题描述

目前,我们使用通用的 SNMP 硬件检查器和一个 Python 字典,该字典定义了 SNMP OID/操作与调用者想要指标值的映射关系(有关该映射关系的描述,请参见以下链接)。

https://github.com/openstack/ceilometer/blob/stable/kilo/ceilometer/hardware/inspector/snmp.py#L112

在通用的 SNMP 检查器的基础上,我们仍然有单独的硬件轮询器执行诸如在 Sample 对象中设置多个字段之类的操作。添加一打新的指标是可以的。但是,如果想添加数百个新的 SNMP 指标,我们需要以声明式的方式进行,而不是为每个新的 SNMP 指标添加新的轮询器代码。

提议的变更

在保持当前 SNMP 相关 hardware.* 轮询器不变以保持向后兼容性的同时,我们将添加一个新的通用 SNMP 轮询器,它可以根据用户请求返回不同类型的 SNMP 相关指标。

此通用 SNMP 轮询器将从 YAML 定义文件加载定义,该文件定义了用于调用通用 SNMP 检查器的参数,以及轮询器返回的最终 Sample 对象中的其他字段,例如名称/单位/类型。但是,resource_id/user_id/project_id 仍然会从发现返回的资源中读取,就像我们今天所做的那样。

YAML 定义可能如下所示

---
- counter_name: hardware.cpu.load.15min
  unit: process
  type: gauge
  snmp_inspector:
    matching_type:  type_exact,
    oid:  "1.3.6.1.4.1.2021.10.1.3.1",
    type: float
    metadata: { }
    post_op:

- counter_name: hardware.network.incoming.bytes
  unit: B
  type: cumulative
  snmp_inspector:
    matching_type: type_prefix
    metric_oid:  "1.3.6.1.2.1.2.2.1.10"
    metadata: {
            name: {
                     oid: "1.3.6.1.2.1.2.2.1.2",
                     type: "str",
            },
            speed: {
                     oid: "1.3.6.1.2.1.2.2.1.5",
                     type: "lambda x: int(x) / 8",
            },
      }
    post_op: "_post_op_net"

有关定义中 snmp_inspector 字典的详细说明,请参见以下链接

https://github.com/openstack/ceilometer/blob/stable/kilo/ceilometer/hardware/inspector/snmp.py#L112

添加新的 SNMP 指标时,我们只需要将新的定义添加到 YAML 定义中即可。无需编写新代码。

由于新的通用 SNMP 轮询器可以返回多种不同类型的计量器,它将给当前的轮询代理实现带来以下变化

1. 目前,由于计量器轮询器插件与一个计量器的映射关系,在确定给定管道是否需要轮询器时,我们使用轮询器插件的入口点名称。这将被更改。我们将添加一个新的辅助函数,该函数可以返回轮询器可以返回的所有计量器,并在上述过程中使用该辅助函数来确定给定管道是否需要轮询器。

2. 在调用轮询器插件获取样本时,我们将把管道定义作为新的参数传递给 get_samples() 调用。因此,轮询器不必返回所有样本,而只能返回管道源请求的内容。

替代方案

数据模型影响

REST API 影响

安全影响

Pipeline 影响

管理员配置管道 YAML 文件的方式没有变化。

其他最终用户影响

性能/可扩展性影响

其他部署影响

需要在运行轮询代理的系统上部署一个新的 YAML 定义文件。

开发者影响

实现

负责人

主要负责人

<lianhao-lu>

持续维护者

<lianhao-lu>

工作项

  • 增强管道以支持新的源定义

  • 实现通用的 SNMP 轮询器及其 YAML 定义文件

未来生命周期

由 <lianhao-lu> 维护

依赖项

N/A

测试

功能测试应在 Intel Hradware-Meters CI 的第三方 CI 中覆盖。

文档影响

需要更新 openstack-manual 管理手册,说明管道定义的变化。

参考资料

N/A