Queues and streams

RabbitMQ

Queue depth, consumer count and dead-letter queues — the last of which is usually the finding.

RabbitMQ's management API exposes everything an investigation needs about message flow, and the single most useful thing in it is the dead-letter queue. Messages that could not be processed are routed there, retained silently, and monitored by almost nobody — which makes it the queue equivalent of the reject table.

The second most useful is the split between messages_ready and messages_unacknowledged. A queue with a large unacked count is not backed up because it lacks consumers; it is backed up because a consumer took the messages and never acknowledged them, which is a completely different diagnosis.

What is read

What Decim reads from RabbitMQ

Every item below is read-only, and each is a specific view, endpoint or file rather than a category of access. If something here is unacceptable in your environment, it can be removed from the query catalogue — see the agent for how that works.

RabbitMQ — metadata sources
What From Why it matters
Queue depthGET /api/queuesmessages_ready and messages_unacknowledged, separately
Consumer countGET /api/queuesZero consumers on a live queue is an immediate finding
Message ratesmessage_statsPublish, deliver and ack rates over time
Dead-letter configarguments.x-dead-letter-exchangeWhere rejected messages go, if anywhere
BindingsGET /api/bindingsExchange-to-queue routing — the topology
Connections and channelsGET /api/connectionsWhich services are attached
Shovel and federationGET /api/shovelsCross-broker movement, frequently undocumented

Permissions required

Written out in full, because "read-only access" is not a specification. Nothing below grants the ability to write, and row access is requested only on the specific tables you name.

Monitoring user — no message access bash
# The built-in monitoring tag grants read access to the management API
# without any ability to publish, consume, or purge.
rabbitmqctl add_user decim-agent '...'
rabbitmqctl set_user_tags decim-agent monitoring

# Explicitly no permissions on any vhost resource: the monitoring tag
# covers the API surface, and this leaves message operations impossible.
rabbitmqctl set_permissions -p / decim-agent '^$' '^$' '^$'

# What the agent reads:
curl -s -u decim-agent:... \
  "https://rabbit.internal:15672/api/queues?columns=name,messages_ready,\
messages_unacknowledged,consumers,arguments"

What it builds

What this source contributes to the pipeline topology and to the evidence available during an investigation:

  • Exchange and queue topology from bindings
  • Which services consume which queues, from connection and channel data
  • Dead-letter routing — and, more often, its absence
  • Cross-broker movement via shovels that no diagram includes

Nodes learned from a definition are marked declared; nodes observed running are marked observed; nodes both declared and observed are verified. Where two sources disagree, the disagreement is recorded as a drift note rather than resolved silently.

Failure modes

Failure modes it surfaces

What this source is uniquely good at proving — and, just as usefully, at disproving. An investigation that can refute a hypothesis cheaply is worth as much as one that confirms it.

Failure modes RabbitMQ evidence distinguishes
Failure mode The signal
Messages quietly dead-letteredGrowing depth on a DLQ nobody monitors
Consumer took messages and hungHigh messages_unacknowledged, low ready
No consumers attachedconsumers = 0 on a queue still being published to
Messages dropped entirelyNo dead-letter exchange configured on a queue that rejects

Limits

What this integration cannot tell you. Stated because an investigation that overstates its sources produces confident wrong answers, which is worse than an honest blocked.

  • Management plugin statistics are sampled; short spikes may not appear in rate metrics
  • Message content is never read, so the agent cannot tell you which records were affected — only how many
  • Queue depth reflects the moment of sampling and a fast-draining backlog may be invisible between polls

Related integrations

  • Apache Kafka — Consumer lag is the leading indicator. Reads group offsets, topic ends and partition assignment.
  • Custom services — No API and no metadata database — structured logs, config files and the tables they write to.
  • SQL Server — Reads catalog metadata, procedure bodies and write activity — the definitions git never sees.

See all integrations, or how the sources are combined into one graph.

Get started

Investigating a RabbitMQ pipeline?

Bring an incident you already know the answer to. If Decim gets it wrong, that is a more useful demo than one where it doesn't.