声明式通知处理

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

本规范的目标是提出一种更声明式的方法来定义通知事件。

问题描述

现有的通知处理实现存在各种限制。本提案解决的问题包括

  • 无法选择性地监听感兴趣的特定事件主题。

  • 捕获感兴趣的通知不应需要代码更改。

  • 添加新的事件交换机涉及相同的例行代码更改。代码重复过多。

  • 需要比需要的更多地了解代码库

  • 更优雅的交换机控制

本提案采用更声明式的方法来解决这些问题。

提议的变更

首先,我们定义一个通知事件模板,其中设置事件签名和属性。这是一个简单的 yaml 文件,格式如下

---
resources:
  - name: image
     type: "gauge"
     topics:
          - "image.size"
     volume: payload.size
     unit: B
     counter_name: image.size
     tenant_id: payload.tenant_id
     user_id: payload.user_id
     instance_id: payload.instance_id

这本质上描绘了我们在 notifications.py 中添加的样板代码。基本的通知处理程序加载事件定义并执行调用 process_notifications 和生成样本的初步步骤。优势在于,未来当需要添加新事件时,最终用户只需更新 yaml 文件即可。

另请注意,我们正在逐步淘汰存在计量器。所有当前的存在计量器都将放在模板文件的底部,并附带说明,说明它们将在“M”版本中删除。

其次,我们需要优雅地处理此定义中的交换机控制。交换机在 ceilometer.conf 中指定

我们已经在 ceilometer.conf 中定义了交换机。我们可以按原样利用这些交换机,并假设如果定义了这些交换机,我们将启用它们。我们还可以添加一个新选项来指定我们希望允许的所有交换机,交换机名称与定义的名称相同。这些交换机将由基本通知处理程序读取,get_targets 逻辑将循环遍历允许的交换机并设置交换机。如果事件名称是交换机名称的一部分,我们将跳过处理这些通知并继续。

替代方案

我们可以利用现有的 event_definition.yaml 用于转换。但我不太确定它是否足够自由和灵活。我对此想法持开放态度。

数据模型影响

REST API 影响

安全影响

Pipeline 影响

其他最终用户影响

性能/可扩展性影响

其他部署影响

开发者影响

实现

负责人

主要负责人

Pradeep Kilambi <pkilambi@redhat.com>

其他贡献者

Pradeep Kilambi <pkilambi@redhat.com>

工作项

工作项:* 定义事件通知模板 * 实现通用通知处理程序以处理模板并生成样本 * 添加对处理交换机控制的支持 * 清理现有处理程序 * 添加和更新测试覆盖率

未来生命周期

依赖项

测试

添加单元测试覆盖

文档影响

通过模板文件和示例记录启用通知事件和交换机的新方法。

参考资料