Firehose Tracer
Overview
Sometimes, during development or debugging, it's useful to be able to see every message that is published, and every message that is delivered. RabbitMQ has a "firehose" feature, where the administrator can turn on (on a per-node, per-vhost basis) an exchange to which publish- and delivery-notifications should be CCed.
These notifications are close to what's happening on the wire - for example you will see unacked messages.
When the feature is turned off, it has no effect on performance; when it is turned on, performance will drop somewhat due to additional messages being generated and routed.
Turning on firehose
Before turning on the feature, decide which node, and which vhost, should have it turned on.
The following examples assume the default vhost, "/
", and the default node
"rabbit@(hostname)
". Use the
-n
argument to specify a node other than,
and the -p
argument to specify another
vhost.
Next, within the chosen vhost declare queues, bind them to the
topic exchange amq.rabbitmq.trace
, and
begin consuming.
Finally, to turn on firehose tracing with
rabbitmqctl trace_on -p [virtual host]
Turn off firehose
To turn off Firehose, run
rabbitmqctl trace_off -p [virtual host]
Don't forget to clean up any queues that were used to consume events from the Firehose.
Note that the firehose state is not persistent; it will default of off at server start time.
Firehose Event Message Format
The firehose publishes messages to the topic exchange
amq.rabbitmq.trace
. In this section we refer to the messages consumed and inspected
via the Firehose mechanism as "traced messages".
Traced message routing key will be either "publish.{exchangename}
" (for messages
entering the node), or "deliver.{queuename}
" (for messages that are delivered to consumers).
Traced message headers containing metadata about the original message:
Header | Type | Description |
---|---|---|
exchange_name | longstr | name of the exchange to which the message was published |
routing_keys | array | routing key plus contents of
|
properties | table | content properties (message metadata map) |
node | longstr | Erlang node on which the trace message was generated |
redelivered | signedint | whether the message has its redelivered flag set (messages leaving the broker only) |
Traced message body corresponding to the body of the original message.
Tracing plugin
The rabbitmq_tracing
plugin builds on top of the tracer
and provides a GUI to capture traced messages and log them
in text or JSON format files.