在 MongoDB 上启用事件功能

https://blueprints.launchpad.net/ceilometer/+spec/mongodb-events-feature

事件功能已经在 SQLAlchemy 和 HBase 后端实现。现在需要将其扩展到 MongoDB 和 DB2。

问题描述

使用场景是将事件存储在数据库(MongoDB 或 DB2)中,并从该数据库获取事件(事件类型、特征、特征类型)。

主要思路是以类似于在其他驱动程序(SQLAlchemy 和 HBase)中实现的方式来实现事件功能。

用例

  • 获取在指定时间段内创建的所有事件

  • 按事件类型获取事件

  • 按事件消息 ID 获取事件

  • 按特征描述、类型和值获取事件

  • 获取所有已存储的事件类型

  • 获取属于特定事件类型的全部特征类型

  • 获取特定事件类型中可以找到的所有特征,并可选地指定特定的特征类型。

提议的变更

在 ceilometer.storage.pymongo_base.py 中添加新的方法,用于将事件存储到数据库并从数据库获取事件。基于已经完成的事件实现,我们应该创建以下方法

  1. record_event – 将收集到的事件存储到 MongoDB 和 DB2 的方法

  2. get_events – 从 MongoDB 和 DB2 获取事件的方法,并指定以下过滤器:- 事件生成时间段 - 事件类型 - 事件消息 ID - 特征描述、类型和值(此处应考虑值上的可能操作,例如:<lt, le, eq, ne, ge, gt>)

  3. get_event_types – 获取数据库中存储的所有事件类型的方法。

  4. get_trait_types – 方法返回所有存储事件类型的特征类型,或者仅返回如果指定了事件类型,则返回该事件类型的特征类型。

  5. get_traits – 方法返回特定事件类型的全部特征,或者如果定义了类型,则返回指定特征类型的特征。

替代方案

数据模型影响

我们需要在 MongoDB 和 DB2 中添加一个新的集合来存储事件

集合

  • events
    • _id: 事件的 UUID (Event.message_id)

    • event_type: 事件类型的描述

    • timestamp: 事件生成的时间戳

    • traits: [{trait_name: string, trait_type: integer,

      trait_value: data} 的数组]

REST API 影响

安全影响

Pipeline 影响

其他最终用户影响

性能/可扩展性影响

其他部署影响

开发者影响

实现

负责人

主要负责人
  • idegtiarov

持续维护者
  • idegtiarov

工作项

  • 为 MongoDB 和 DB2 上的事件功能实现创建新方法

  • 在单元测试中测试方法

未来生命周期

依赖项

测试

此代码将在事件功能的单元测试中进行测试

文档影响

参考资料