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 Ceilometer service during Havana development cycle then split out to this independent project in Liberty development cycle, allows you to set alarms based on threshold evaluation for a collection of samples or a dedicate event. 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 only several actions have been implemented so far:

  1. 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.
  2. log: mostly useful for debugging, stores alarms in a log file.
  3. zaqar: Send notification to messaging service via Zaqar API.

Alarm Rules

combination

Alarm Combination Rule

Describe when to trigger the alarm based on combining the state of other alarms.

composite

Composite alarm rule.

A simple dict type to preset composite rule.

event

Alarm Event Rule.

Describe when to trigger the alarm based on an event

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

threshold

Alarm Threshold Rule

Describe when to trigger the alarm based on computed statistics

Alarm Evaluators

combination

Warning

No documentation found in combination = aodh.evaluator.combination:CombinationEvaluator

composite

Warning

No documentation found in composite = aodh.evaluator.composite:CompositeEvaluator

gnocchi_aggregation_by_metrics_threshold

Warning

No documentation found in gnocchi_aggregation_by_metrics_threshold = aodh.evaluator.gnocchi:GnocchiAggregationMetricsThresholdEvaluator

gnocchi_aggregation_by_resources_threshold

Warning

No documentation found in gnocchi_aggregation_by_resources_threshold = aodh.evaluator.gnocchi:GnocchiAggregationResourcesThresholdEvaluator

gnocchi_resources_threshold

Warning

No documentation found in gnocchi_resources_threshold = aodh.evaluator.gnocchi:GnocchiResourceThresholdEvaluator

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://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://host/action.

zaqar

Zaqar notifier.

Alarm Storage

log

Log the data.

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.