(Note: Credit goes to Sam Morrison at NeCTAR for passing this tip on to us!)

We use the Ceilometer notification agent to collect notification events from the various OpenStack services, and then republish those events to a Kafka cluster.  Those events are consumed by other teams within the company that want to be notified about state changes on VMs, images, etc.

We also use Nova cells, which means we have multiple RabbitMQ clusters in our clouds (one for each cell.)  Traditionally, oslo.messaging can only connect to a single RabbitMQ cluster.  This means we have to run an instance of the Ceilometer notification agent for every Nova cell (including the API cell.)  This gets unwieldy fast, especially since we actually run two agents per cell for redundancy.

legacy-ceilometer-architecture

Enter [notifications/messaging_urls]

This little-known (to me, at least) MultiStrOpt setting in Ceilometer allows you to have a single Ceilometer agent connect to multiple RabbitMQ clusters and pick up events from all of them:

[notification]
messaging_urls=rabbit://u:p@apicell:5671/
messaging_urls=rabbit://u:p@cell001-01:5671,u:p@cell001-02:5671/
messaging_urls=rabbit://u:p@cell002-01:5671,u:p@cell002-02:5671/

This works fantastically and turns out has been in Ceilometer since several releases ago.

We’re thrilled to be able to simplify our Ceilometer deployment and eliminate many of the agents we have to run and manage:

ceilometer-new-architecture