/vanguard

Management UI for disparate/unclustered RabbitMQ instances

Primary LanguageJavaScriptMozilla Public License 2.0MPL-2.0

Vanguard

Build Status

Table of Contents

At SoundCloud we run a number of disparate RabbitMQ instances which are all loosely related and interconnected via federation links or shovel configurations.

While the default RabbitMQ Management UI works great for cluster overviews, it's a chore in an unclustered topology to check many instances of the Management UI for node health and thoroughput.

Vanguard is an attempt at keeping the UI useful and accessible in the above scenario by serving a copy of the Management UI which proxies requests to seperate backend API instances, aggregates/munges/unions the result, and presents it back to the user.

The following screenshot shows Vanguard configured for two seperate RabbitMQ backends which are not clustered:

Vanguard

Vanguard ships with a copy of the static assets from the 2.8.4 version of the rabbitmq-management plugin - so if you run an older version of RabbitMQ than 2.8.4, there may be unintended behaviour on some of the tabs, ie. /#/exchanges don't work correctly with 2.7.0 backends.

Vanguard is still under development, with the intention of ironing out a few bugs in any of the readonly actions. Write actions such as publishing messages, deleting bindings, and so on will not be supported.

Vanguard is deployed following something along the lines of a 12factor approach - this means all configuration is set through ENV variables:

PORT=8080
BACKENDS=http://guest:guest@localhost:55670,http://guest:guest@localhost:55680

PORT is the HTTP listener's port, and BACKENDS is a comma seperated string of URIs containing auth, host, and port information for the backend RabbitMQ HTTP API instances. These will all need to be exported under the user running Vanguard.

I strongly suggest only using RabbitMQ users which have readonly permissions and the monitoring tag set, as the auth information in the BACKENDS URIs.

To play around with Vanguard locally you will need two seperate terminals open. In the first terminal:

make dev

Which starts two backend RabbitMQ instances. (You can configure which AMQP port range is used by looking in ./dev/run). Then, in the second terminal:

make build
foreman start

Which will use the .env file in the root directory, and start Vanguard connecting to the two previously started RabbitMQ APIs. Point your browser at localhost:8080 to see it in action.

Run all the tests:

make test

The unit target supports an ENV variable T specifying a specific suite to run. For example:

make unit T=vanguard_json # Name of the eunit module, minus the '_test.erl' suffix

For any problems, comments or feedback please create an issue here on GitHub.

Vanguard is released under the Mozilla Public License Version 2.0. The ./priv/www directory contains copies of the related rabbitmq-management licenses.