Ceilometer provides the ability for metering, alarming, and eventing. As Ceilometer tracks more and more data, scalability issues will arise.
Currently, metering and event data coexists on the same database. While related, there’s a logical separation in the metering and event models where the data in each model has its own unique data and structure; the metering model can be best described as a time series while the event model is closer to an entity attribute model. As the models are different in what they capture, it makes sense that deployers may choose to use different storage drivers to store each data set.
Similar to the work done to split alarming into its own database, this blueprint is to allow for event related data to be stored in its own database.
Continue on as status quo.
None, the model remains the same.
None, the api will remain the same. The only change is the api will now read from events database when event api is called.
Policies and permissions will remain unchanged. The API will continue to function as before and give the same amount of access to data. To that effect, users will require an admin role to have access to data.
The end user will now be able to store event data in a different database from metering data. Alternatively, they can continue on as how Ceilometer currently functions and store event and metering data in the same database.
This will probably improve scalability as it allows deployers to split event and metering data so a single database is not flooded by queries against disconnected data sets. There also remains the ability to write to the same db so the currently design/performance can continue as well.
A config option to specify an event database is added:
[database] metering_connection=hbase:// alarm_connection=sqlite:// *event_connection=mongodb://*
Future event related work should be done in event submodule.
There is common code shared between alarm, event, and metering backends which can be refactored.
Existing testing should be sufficient. The only additional tests required are test the ability to define separate backends for each data set (alarm, event, metering) and to ensure the capabilities of each backend return the correct set of capabilities.
We need to update docs to highlight how to enable event specific backend.
dedicated alarm database blueprint: https://blueprints.launchpad.net/ceilometer/+spec/dedicated-alarm-database