在 HBase 上启用事件功能

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

目前事件功能仅在 SQLAlchemy 后端实现,因此选择其他数据库事件不受支持。

问题描述

用例是将事件存储在 HBase 中,并从该数据库获取事件(事件类型、特征、特征类型)。

主要思想是以类似于 SQLAlchemy 驱动程序中完成的方式实现事件功能。

用例

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

  • 按事件类型获取事件

  • 按事件消息 ID 获取事件

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

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

  • 获取属于特定事件类型的所有特征类型

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

提议的变更

在 ceilometer.storage.impl_hbase.py 中添加新方法,用于从数据库存储和获取事件。基于 SQL 数据库的事件实现,我们应该创建以下方法

  1. record_event – 将收集到的事件存储到 HBase 的方法

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

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

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

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

替代方案

数据模型影响

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

集合

  • events
    • 行键:事件生成的时间戳 + 事件的 UUID

      格式为:“%s+%s” % (ts, Event.message_id) 如果我们以这样的行键存储事件,它们将按时间戳在数据库中排序。

    -列族
    f: 包含以下限定符

    -event_type: 事件类型的描述 -timestamp: 事件生成的时间戳 -该事件的所有特征,格式为“%s+%s” % (trait_name, trait_type)

REST API 影响

安全影响

Pipeline 影响

其他最终用户影响

性能/可扩展性影响

其他部署影响

开发者影响

实现

负责人

主要负责人
  • idegtiarov

持续维护者
  • idegtiarov

工作项

  • 创建用于在 HBase 上实现事件功能的新方法

  • 在单元测试中测试方法

未来生命周期

依赖项

测试

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

文档影响

参考资料