Monitor RabbitMQ with OpenTelemetry
Osuite monitors RabbitMQ through the OpenTelemetry Collector’s rabbitmq receiver, which reads the Management Plugin’s HTTP API and exports per-queue metrics over OTLP. Message backlogs and consumer counts arrive with the same resource attributes as your services, so a stalled worker in APM lines up with the queue it drains.
Prerequisites
Section titled “Prerequisites”- A reachable RabbitMQ node with the Management Plugin enabled (the receiver scrapes its HTTP API on port 15672).
- A user with at least monitoring-level permissions.
Enable the plugin and create a monitoring user:
rabbitmq-plugins enable rabbitmq_managementrabbitmqctl add_user otel a-strong-passwordrabbitmqctl set_user_tags otel monitoringrabbitmqctl set_permissions -p / otel "" "" ".*"Export the password to the Collector’s environment:
export RABBITMQ_PASSWORD='a-strong-password'Configure the Collector
Section titled “Configure the Collector”-
Add the
rabbitmqreceiver, theotlp/osuiteexporter, and a metrics pipeline. Pick the tab that matches where your Collector runs — only the receiverendpointchanges.receivers:rabbitmq:endpoint: http://localhost:15672username: otelpassword: ${env:RABBITMQ_PASSWORD}collection_interval: 30sprocessors:batch:resourcedetection:exporters:otlp/osuite:endpoint: ingest.<region>.osuite.io:443headers:x-osuite-ingest-token: <your-ingest-token>service:pipelines:metrics:receivers: [rabbitmq]processors: [batch, resourcedetection]exporters: [otlp/osuite]receivers:rabbitmq:endpoint: http://rabbitmq:15672username: otelpassword: ${env:RABBITMQ_PASSWORD}collection_interval: 30sprocessors:batch:resourcedetection:exporters:otlp/osuite:endpoint: ingest.<region>.osuite.io:443headers:x-osuite-ingest-token: <your-ingest-token>service:pipelines:metrics:receivers: [rabbitmq]processors: [batch, resourcedetection]exporters: [otlp/osuite]receivers:rabbitmq:endpoint: http://rabbitmq.default.svc.cluster.local:15672username: otelpassword: ${env:RABBITMQ_PASSWORD}collection_interval: 30sprocessors:batch:resourcedetection:exporters:otlp/osuite:endpoint: ingest.<region>.osuite.io:443headers:x-osuite-ingest-token: <your-ingest-token>service:pipelines:metrics:receivers: [rabbitmq]processors: [batch, resourcedetection]exporters: [otlp/osuite] -
Start the Collector. On Docker and Kubernetes, the Collector and RabbitMQ must share a network so the
endpointresolves.
Validate
Section titled “Validate”What you should see
Metrics named rabbitmq.* appear in Dashboards → Explore metrics within a minute, broken down by queue and virtual host.
Data collected
Section titled “Data collected”| Metric | Description | Unit |
|---|---|---|
rabbitmq.message.current | Messages currently in the queue, by state | {messages} |
rabbitmq.message.published | Messages published to the queue | {messages} |
rabbitmq.message.delivered | Messages delivered to consumers | {messages} |
rabbitmq.message.acknowledged | Messages acknowledged by consumers | {messages} |
rabbitmq.message.dropped | Unroutable messages discarded | {messages} |
rabbitmq.consumer.count | Consumers reading from the queue | {consumers} |
Node-level metrics (memory, disk, file descriptors, socket usage) are available by enabling the receiver’s optional node metrics.
Dashboards and alerts
Section titled “Dashboards and alerts”Once metrics arrive, build a RabbitMQ dashboard in the dashboard builder from the series above. Alerts in Osuite are PromQL-based — see Alerts. Useful starting conditions: a growing rabbitmq.message.current in the ready state, a rabbitmq.consumer.count of zero on an active queue, and a rising rabbitmq.message.dropped rate.
Troubleshooting
Section titled “Troubleshooting”- Connection refused on 15672 — confirm the Management Plugin is enabled and listening; the receiver uses the HTTP API, not AMQP on 5672.
- 401 Unauthorized — confirm the
oteluser has themonitoringtag and read permissions on the virtual hosts you monitor.
No data in Osuite after a few minutes? Work through these checks.
- Endpoint — confirm the exporter targets exactly
ingest.<region>.osuite.io:443for your region, over TLS. - Token — confirm the ingest header carries a valid
<your-ingest-token>and has not been rotated. - Pipeline — confirm the signal you expect (traces, logs, or metrics) is wired into an active pipeline with the
otlp/osuiteexporter attached. - Export errors — check the application or Collector logs for OTLP export failures (auth, DNS, TLS, connection refused).
- Network — confirm the host has outbound access to the ingest endpoint on port
443. - Timing — allow up to a minute for the first data to appear before assuming a failure.
Still stuck? Ask the Investigation Agent or contact support.