跟踪 DBaaS(Trove) 通知¶
https://blueprints.launchpad.net/ceilometer/+spec/track-dbaas-notifications
此蓝图的目标是捕获 Trove (DBaaS) 在创建、修改卷、调整大小、删除操作以及周期性存在事件期间发出的通知事件。
问题描述¶
Trove 是 OpenStack 的数据库即服务。它自动化关系型或非关系型数据库的创建、配置和管理,而无需承担处理复杂管理任务的负担。
trove-taskmanager 服务会分发诸如配置数据库实例、管理数据库实例的生命周期以及对数据库实例执行操作之类的任务,并为每个此类任务发出通知事件。
这些通知是 CRUD 事件,通知 Trove 实例及其底层卷的创建、更新或修改,并且还具有诸如实例大小和卷大小之类的测量值。
需要更新 Ceilometer 以消费和记录这些通知,作为样本和事件(特征)。
从 Trove 的角度来看,它们运行的是数据库实例,而不是计算实例。计量和计费将基于数据库运行的小时数,不一定基于托管实例的运行时间。这需要生成和存储一组唯一的计量记录(样本),以实现对单个数据库实例的使用跟踪和计费。
如果 Ceilometer 处理并记录这些通知,其他服务将能够将其用于聚合和计费目的。
提议的变更¶
为了表示为事件,需要在 /etc/ceilometer/event_definitions.yaml 文件中定义事件定义和字段映射(特征定义),用于 Trove 资源类型 - 实例。
特征定义中的特征字段语法遵循 JSONPath 的一种变体。
需要在 event_definitions.yaml 中包含的域通知的事件定义和字段映射示例:
event_type: trove.instance.*
traits: &trove_traits
instance_size
fields: payload.instance_size
resource_id
fields: payload.instance_id
instance_name
fields: payload.instance_name
nova_instance_id
fields: payload.nova_instance_id
created_at
fields: payload.created_at
launched_at
fields: payload.launched_at
volume_size
fields: payload.volume_size
volume_id
fields: payload.nova.volume_id
modify_at
fields: payload.modify_at
deleted_at
fields: payload.deleted_at
为了在 Ceilometer 中启用事件处理,需要在 ceilometer.conf 中进行配置:
在通知部分,将 store_events 配置为 True:
例如 - [notification] store_events = True
在事件部分,指定 event_definitions 文件名:
例如 - [event] definitions_cfg_file = event_definitions.yaml
使用事件可以更好地查询元数据,并避免了将样本与固定测量值 1 聚合的努力。
为了表示为样本,Ceilometer 需要一个通知插件,以监听交换机和主题上的通知,并将它们转换为样本。
这需要考虑数据库的运行时间,该时间基于 trove.instance.exists 事件。具体而言,每个存在事件的 audit_period_beginning 和 audit_period_ending 将用于计算运行时间。
可以使用计数器类型 - database 来关联 Trove 样本。
添加一个新的监听器类 - TroveMetricsNotificationBase,它扩展了 plugin.NotificationBase,用于 DBaaS 服务,以将 Trove 事件数据转换为样本。
TroveMetricsNotificationBase 的一个子类,用于为 trove.instance.create 和 trove.instance.exists 事件以及 trove.instance.modify* 和 trove.instance.delete 事件发出样本。
Trove 事件类型具有以下模式:
trove.<resource>.create
trove.<resource>.modify_volume
trove.<resource>.modify_flavor
trove.<resource>.delete
trove.<resource>.exists
其中 resource 是 instance。
替代方案¶
数据模型影响¶
无。
REST API 影响¶
无。
安全影响¶
无。
Pipeline 影响¶
无。
其他最终用户影响¶
无。
性能/可扩展性影响¶
没有新的影响。通知和存储处理层现有容量方面的担忧仍然存在。
其他部署影响¶
在 ceilometer.conf 中启用 Trove 交换机。
开发者影响¶
无。
实现¶
负责人¶
- 主要负责人
rjaiswal
- 持续维护者
rjaiswal
工作项¶
所有支持的 Trove 资源类型的事件定义和字段映射。
事件验证。
Trove 通知监听器类,用于处理 Trove 实例的创建/更新/删除/存在事件。
针对上述监听器类和样本验证的测试覆盖率。
未来生命周期¶
当添加新的资源类型或支持新的功能(如备份/恢复、补丁、监控等)时,可能会出现新的通知类型。
当 Trove 符合 PaaS 事件格式时,需要重构集成事件的字段映射,以适应新的事件格式。
随着 Ceilometer 中声明式计量的迫在眉睫,针对 Trove 的提议通知插件将变得冗余/弃用,并由声明式计量定义取代。
依赖项¶
DBaaS 被一些人认为是 PaaS 服务,可能拥有自己的消息总线,用于发送通知。Ceilometer 最近已扩展为从多个消息总线消费通知 - https://review.openstack.org/#/c/77612/
如果有多个消息总线,则需要在 Ceilometer 配置中配置多个传输端点(ceilometer.conf)。
测试¶
将添加单元和集成测试来验证生成的事件。
文档影响¶
无。
参考资料¶
https://docs.openstack.org/developer/ceilometer/events.html
https://docs.openstack.org/trunk/config-reference/content/ch_configuring-openstack-telemetry.html
https://wiki.openstack.org/wiki/Trove/trove-notifications