Guide · RabbitMQ

The RabbitMQ Monitoring and Alerting Guide

Most RabbitMQ monitoring fails in one of two directions: nothing fires until a customer reports the outage, or everything fires and on-call stops reading it. The difference is not the tool. It is choosing metrics that lead the incident rather than confirm it, and setting thresholds against the rate of change rather than a number. This guide covers what to collect, what to alert on, and what to leave on a dashboard.

Tyler Eastridge

By Tyler Eastridge, Head of Operations

LinkedIn · Updated

5 min read9 sections
On this page
What to alert on, and what to leave on a dashboard

What to alert on, and what to leave on a dashboard

Alert on the eight signals below. Everything else is context you look at once an alert has already fired.

SignalWhy it leadsAlert on
Queue depth trendAbsolute depth is meaningless; sustained growth is notGrowth over a rolling window, not a fixed count
Unacked messagesRises before a queue visibly stallsSustained growth with consumers connected
Consumer countZero consumers on a live queue is silentConsumers below expected, per queue
Memory watermarkPublishers block the moment it tripsApproaching the watermark, not reaching it
Disk freeSame block, slower to recoverApproaching the threshold
Connection and channel countChurn exhausts descriptors quietlyTrend upward, plus absolute ceiling
Quorum member healthA queue with a lost majority stops writingAny member unavailable
Node and partition statePartitions are invisible from the applicationImmediately, always

Collect with the Prometheus plugin, not by polling the management API

The built-in rabbitmq_prometheus plugin exposes cluster metrics on 15692 in a form built for scraping. Teams that poll the management HTTP API instead end up adding measurable load to the broker they are trying to observe, particularly on clusters with many queues, where the API aggregates on request.

Enable the plugin, scrape it on a normal interval, and keep enough retention to see a week-over-week trend. Most useful alerts compare now against an hour ago, so a monitoring stack with only current values cannot express them.

Alert on how fast a queue is growing, not how deep it is

A queue holding fifty thousand messages is normal for a batch workload and an emergency for a request-reply one, so an alert on absolute depth either pages constantly or never. What matters is publish rate exceeding consume rate for long enough that the backlog will not clear on its own.

Alert on sustained growth over a rolling window, per queue, with the window matched to how bursty the workload is. Keep absolute depth on the dashboard for context during the incident.

Watch unacknowledged messages as the early stall signal

Unacked climbing while consumers stay connected is the clearest early warning RabbitMQ gives: consumers are taking messages and not finishing them. It appears well before the queue looks stuck, and it is the metric that distinguishes a slow consumer from an absent one.

Alert on sustained unacked growth, and pair it with per-consumer prefetch, because an unbounded prefetch lets a single consumer hold a large backlog in flight and turns its crash into a redelivery storm.

Alert when a queue has fewer consumers than it should

A queue with zero consumers produces no errors. Publishers keep succeeding, depth grows slowly, and nothing surfaces until the backlog is large or a TTL starts discarding messages. Deployments that fail to reconnect are the usual cause, and they fail silently.

Record the expected consumer count per queue and alert on any queue below it. This is one of the few RabbitMQ alerts worth having as an absolute threshold rather than a trend.

Catch memory and disk alarms on approach, not on arrival

When RabbitMQ crosses its memory high watermark or its free disk threshold, it blocks publishers cluster-wide. By the time the alarm fires, the outage has already started, so an alert on the alarm itself is a notification rather than a warning.

Alert on approach instead, at a margin that leaves time to act, and treat repeated approaches as a sizing finding rather than an operational one. On virtualised infrastructure watch CPU steal and disk await alongside, because contention produces the same symptoms without the same cause.

Trend connections and channels to catch client-side leaks

Connection and channel counts that climb steadily are a client-side defect, not a broker one: an application opening a connection per message, or failing to close channels. The symptom presents as a RabbitMQ memory leak, and the fix is almost always in the application.

Trend both counts plus file descriptors and Erlang processes, alert on the trend and on an absolute ceiling below the configured limits, and use the connection metadata to identify which client is responsible before the descriptors run out.

Monitor quorum membership and node state directly

A quorum queue that has lost its majority stops accepting writes by design, and a network partition can leave the cluster in a state no single node reports as unhealthy. Neither is visible from the application until publishes start failing.

Alert on any quorum member unavailable, on node-down, and on partition state, with no delay and no threshold. These are the RabbitMQ alerts that should always page.

On Kubernetes, add the signals the scheduler introduces

Running on Kubernetes adds failure modes the broker metrics do not cover: pod eviction, node drain without a graceful RabbitMQ shutdown, storage class latency, and memory limits set below what the node needs under load. A cluster can look healthy in RabbitMQ's own metrics while the scheduler is removing it underneath.

Monitor pod restarts, eviction events and persistent volume latency alongside the broker metrics, and make sure a node drain triggers a graceful broker shutdown rather than an eviction.

Decide who reads the alert at three in the morning

Monitoring produces an alert; someone has to act on it. Estates that get this far and still have long incidents usually have alerts routing to a channel nobody is paged from, or to an engineer who owns the application rather than the broker.

Route the eight paging signals into whatever your team already wakes up for, keep everything else on a dashboard, and confirm the on-call path with a test alert rather than assuming it. Where there is no in-house RabbitMQ on-call, that is the gap a support contract fills.

Frequently asked questions

What should you monitor on RabbitMQ?

Queue depth as a rate of change, unacknowledged messages, consumer count per queue, memory and disk headroom against the watermarks, connection and channel counts with file descriptors, quorum member availability, node and partition state, and on Kubernetes the pod, eviction and volume-latency signals. Collect via the rabbitmq_prometheus plugin rather than polling the management API.

What RabbitMQ metrics should actually page someone?

Node down, network partition, any quorum member unavailable, memory or disk approaching the watermark, sustained queue growth that will not clear, sustained unacked growth with consumers connected, and a queue below its expected consumer count. Everything else belongs on a dashboard and is read after an alert has fired.

Should I alert on RabbitMQ queue depth?

Not on an absolute number. Depth that is normal for a batch workload is an emergency for request-reply, so a fixed threshold either pages constantly or never fires. Alert on sustained growth over a rolling window per queue, and keep absolute depth on the dashboard for context.

Why does RabbitMQ block publishers with no error in the application?

The cluster has crossed its memory high watermark or its free disk threshold and is applying flow control, which blocks publishers cluster-wide until the alarm clears. Alerting on approach to those thresholds rather than on the alarm itself is what turns it into a warning instead of an outage notification.

Is the RabbitMQ management plugin enough for production monitoring?

It is fine for inspection and ad-hoc diagnosis, but polling its HTTP API for metrics adds load to the broker, noticeably so on clusters with many queues. Use the rabbitmq_prometheus plugin for collection and keep the management UI for looking at a specific queue during an incident.

RabbitMQ services

Where this gets done

The work behind this page, run by the same engineers who wrote it.

More resources

Other RabbitMQ guides, comparisons and research

From the blog

Recent RabbitMQ articles

Next step

Need this done on your cluster?

AceMQ's senior RabbitMQ engineers support 130+ enterprise clients in 26+ countries under a 15-minute emergency SLA, with direct escalation to the RabbitMQ core team.