Table of Contents
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 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
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
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
monitoringtag set, as the auth information in the
To play around with Vanguard locally you will need two seperate terminals open. In the first terminal:
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:
unit target supports an
T specifying a specific suite to run. For example:
make unit T=vanguard_json # Name of the eunit module, minus the '_test.erl' suffix