事件的 ElasticSearch 后端

https://blueprints.launchpad.net/ceilometer/+spec/elasticsearch-driver

随着我们拆分后端以存储隔离的数据(告警、计量、事件),我们有能力选择针对存储所述数据量身定制的后端。

问题描述

虽然 SQL 能够存储非结构化数据,但其真正的用例是有效地存储具有定义模式和关系的数据,以便于查询。

OpenStack 中的事件在很大程度上是无模式的;每个通知消息可能包含基于消息的来源时间和位置的任何属性组合。

提议的变更

ElasticSearch 主要设计用于存储非结构化的实时数据流,类似于 OpenStack 中的事件,并且在其他项目[1]中也取得了一定的成功。

ElasticSearch 将作为 HBase、MongoDB 和 SQL 的替代后端添加。使用定义文件过滤属性的当前实现将继续使用。捕获和处理事件的 Logstash 实现不在本次蓝图的范围内[2]

此外,API 将继续与当前提供的事件 API 匹配,而不是实现 Logstash。

样本后端不在本次补丁的范围内,因为 TSDB 数据库可能对捕获测量数据提供更好的支持。也就是说,告警数据库是可行的,并且可能包含在后续补丁中。

替代方案

如前所述,现有的使用 MongoDB、HBase 和 SQL 的解决方案仍然存在。它们将继续作为可行的选择。

使用 Kibana 检索/分析数据将不是查询数据的默认解决方案。也就是说,部署者应该能够绕过 Ceilometer 的 API,如果需要,可以使用 Kibana。

应该注意的是,目前不建议将 ElasticSearch 作为主要的存储引擎[3][4]。关于其一致性的争论仍在继续。

另一种解决方案是使用 MongoDB 作为主要存储,并将数据管道传输到 ElasticSearch 以进行更好的查询。[5]

ElasticSearch 与 MongoDB 相似,因为它也基于 JSON。选择 ElasticSearch 作为替代方案的原因是,它允许我们基于时间创建索引,从而有效地分片数据并使数据过期。此外,除了 INFO 通知之外,服务还会发出包含更多文本信息的 ERROR 通知,而 ElasticSearch 专门为此类情况而设计。

数据模型影响

不需要更改数据模型。事件将继续具有以下属性

* message_id
* event_type
* generated
* list of traits

REST API 影响

安全影响

没有新的内容

Pipeline 影响

其他最终用户影响

没有,除非选择 ElasticSearch 作为后端。然后需要相应地配置 ElasticSearch。

性能/可扩展性影响

没有,因为它是一个可选的后端。ElasticSearch 具有集群功能,可以提供 HA,并且构建为横向扩展[6]

其他部署影响

ElasticSearch 存储驱动程序应与当前可用的事件驱动程序后端具有相同的功能。如果选择该驱动程序,它将添加 elasticsearch-py 客户端依赖项。

开发者影响

开发人员在修改 ElasticSearch 驱动程序时需要使用 ElasticSearch 客户端

实现

负责人

主要负责人

chungg

持续维护者

chungg

工作项

  • 编写等效的事件驱动程序函数并进行测试。

未来生命周期

根据 Ceilometer 中事件的演变,ElasticSearch 驱动程序需要更新以支持新功能(如果可行/合乎逻辑)。ElasticSearch 可能会扩展到涵盖告警(和样本),但目前不在范围内,因为时间序列数据库可能是测量数据的更好解决方案。

依赖项

  • elasticsearch-py 客户端库

测试

需要针对模拟数据库或真实的 ElasticSearch 数据库进行测试

文档影响

更新驱动程序文档

参考资料

[1] http://www.elasticsearch.org/case-studies/ [2] http://logstash.net/docs/1.4.2/ [3] http://www.bigdatamontreal.org/?p=305 - elasticsearch 员工 [4] http://aphyr.com/posts/317-call-me-maybe-elasticsearch [5] http://stackoverflow.com/questions/20080189/index-mongodb-with-elasticsearch/20120927#20120927 [6] http://www.elasticsearch.org/overview/elasticsearch