System Architecture¶
High-Level Architecture¶
Each of Aodh’s services are designed to scale horizontally. Additional workers and nodes can be added depending on the expected load. It provides daemons to evaluate and notify based on defined alarming rules.
Evaluating the data¶
Alarming Service¶
The alarming component of Aodh, first delivered in the Havana version, allows you to set alarms based on threshold evaluation for a collection of samples. An alarm can be set on a single meter, or on a combination. For example, you may want to trigger an alarm when the memory consumption reaches 70% on a given instance if the instance has been up for more than 10 min. To setup an alarm, you will call Aodh’s API server specifying the alarm conditions and an action to take.
Of course, if you are not administrator of the cloud itself, you can only set alarms on meters for your own components.
There can be multiple form of actions, but two have been implemented so far:
- HTTP callback: you provide a URL to be called whenever the alarm has been set off. The payload of the request contains all the details of why the alarm was triggered.
- log: mostly useful for debugging, stores alarms in a log file.
For more details on this, we recommend that you read the blog post by Mehdi Abaakouk Autoscaling with Heat and Ceilometer. Particular attention should be given to the section “Some notes about deploying alarming” as the database setup (using a separate database from the one used for metering) will be critical in all cases of production deployment.
Alarm Rules¶
combination¶
Alarm Combinarion Rule
Describe when to trigger the alarm based on combining the state of other alarms.
gnocchi_aggregation_by_metrics_threshold¶
Warning
No documentation found in gnocchi_aggregation_by_metrics_threshold = aodh.api.controllers.v2.alarm_rules.gnocchi:AggregationMetricsByIdLookupRule
gnocchi_aggregation_by_resources_threshold¶
Warning
No documentation found in gnocchi_aggregation_by_resources_threshold = aodh.api.controllers.v2.alarm_rules.gnocchi:AggregationMetricByResourcesLookupRule
gnocchi_resources_threshold¶
Warning
No documentation found in gnocchi_resources_threshold = aodh.api.controllers.v2.alarm_rules.gnocchi:MetricOfResourceRule
Alarm Evaluators¶
combination¶
Warning
No documentation found in combination = aodh.evaluator.combination:CombinationEvaluator
gnocchi_aggregation_by_metrics_threshold¶
Warning
No documentation found in gnocchi_aggregation_by_metrics_threshold = aodh.evaluator.gnocchi:GnocchiThresholdEvaluator
gnocchi_aggregation_by_resources_threshold¶
Warning
No documentation found in gnocchi_aggregation_by_resources_threshold = aodh.evaluator.gnocchi:GnocchiThresholdEvaluator
gnocchi_resources_threshold¶
Warning
No documentation found in gnocchi_resources_threshold = aodh.evaluator.gnocchi:GnocchiThresholdEvaluator
threshold¶
Warning
No documentation found in threshold = aodh.evaluator.threshold:ThresholdEvaluator
Alarm Notifiers¶
http¶
Rest alarm notifier.
https¶
Rest alarm notifier.
log¶
Log alarm notifier.
test¶
Test alarm notifier.
trust+http¶
Notifier supporting keystone trust authentication.
This alarm notifier is intended to be used to call an endpoint using keystone authentication. It uses the aodh service user to authenticate using the trust ID provided.
The URL must be in the form trust+http://trust-id@host/action.
trust+https¶
Notifier supporting keystone trust authentication.
This alarm notifier is intended to be used to call an endpoint using keystone authentication. It uses the aodh service user to authenticate using the trust ID provided.
The URL must be in the form trust+http://trust-id@host/action.
Alarm Storage¶
hbase¶
Put the alarm data into a HBase database
Collections:
alarm:
row_key: uuid of alarm
Column Families:
f: contains the raw incoming alarm data
alarm_h:
row_key: uuid of alarm + ”:” + reversed timestamp
Column Families:
- f: raw incoming alarm_history data. Timestamp becomes now()
if not determined
log¶
Log the data.
mongodb¶
Put the alarm data into a MongoDB database.
mysql¶
Put the data into a SQLAlchemy database.
mysql+pymysql¶
Put the data into a SQLAlchemy database.
postgresql¶
Put the data into a SQLAlchemy database.
sqlite¶
Put the data into a SQLAlchemy database.