Monitor RabbitMQ Logs and Metrics with OpenTelemetry

SigNoz Cloud - This page applies to SigNoz Cloud editions.
Self-Host - This page applies to self-hosted SigNoz editions.

Overview

This guide shows you how to monitor RabbitMQ with OpenTelemetry and SigNoz. The OpenTelemetry Collector reads queue metrics from the RabbitMQ Management API and collects RabbitMQ logs, then sends both signals to SigNoz over OTLP/HTTP.

You collect two signals here:

  • Metrics: message counts, publish and delivery rates, acknowledgements, dropped messages, and consumer counts through the OpenTelemetry rabbitmq receiver.
  • Logs: node startup, connections, alarms, authentication failures, cluster events, and errors, collected by the OpenTelemetry Collector.

Prerequisites

Ensure you have:

  • A running RabbitMQ node and administrative access to it
  • An OpenTelemetry Collector that can reach the RabbitMQ Management API (for metrics) and collect RabbitMQ logs (for logs)
  • An instance of SigNoz (either Cloud or Self-Hosted)

Set Up Telemetry

Set up each signal on its own. Pick a signal below, then the tab for where RabbitMQ runs.

The OpenTelemetry rabbitmq receiver reads queue metrics from the Management API on port 15672 and exports them to SigNoz.

Step 1: Enable the Management Plugin and create a monitoring user

The receiver reads from the Management API, so enable the plugin on the RabbitMQ node:

rabbitmq-plugins enable rabbitmq_management

Create a dedicated monitoring user. The monitoring tag grants read-only access to management statistics, and the empty permission patterns (^$) stop the user from configuring, writing to, or reading from queues:

rabbitmqctl add_user '<monitoring-user>' '<monitoring-password>'
rabbitmqctl set_user_tags '<monitoring-user>' monitoring
rabbitmqctl set_permissions --vhost '<rabbitmq-vhost>' '<monitoring-user>' '^$' '^$' '^$'

Verify these values:

  • <monitoring-user>: a dedicated username, such as otel-monitoring
  • <monitoring-password>: a strong password for the monitoring user
  • <rabbitmq-vhost>: the virtual host to monitor, such as /. Repeat the permissions command for each virtual host the user must see.

On a VM, run the rabbitmqctl commands above directly. In Docker, prefix each one with docker exec <rabbitmq-container>; in Kubernetes, with kubectl exec <rabbitmq-pod> --.

Step 2: Configure and run the Collector

The rabbitmq receiver reads the monitoring password from a RABBITMQ_PASSWORD environment variable, so it never lives in the config file. Every environment below exports to SigNoz Cloud with the same otlphttp exporter, so add it once if you do not have one:

config.yaml
exporters:
  # On Collector v0.144.0 and newer, use "otlp_http" to avoid a deprecation warning.
  otlphttp:
    endpoint: "https://ingest.<region>.signoz.cloud:443"
    headers:
      signoz-ingestion-key: "<your-ingestion-key>"

Verify these values:

Then add the receiver, supply the password, and run the Collector. Pick your environment:

RabbitMQ and the Collector share the host, so reach the Management API on http://localhost:15672. Add the receiver and metrics pipeline to /etc/otelcol-contrib/config.yaml:

/etc/otelcol-contrib/config.yaml
receivers:
  rabbitmq:
    endpoint: http://localhost:15672
    username: <monitoring-user>
    password: ${env:RABBITMQ_PASSWORD}
    collection_interval: 30s

service:
  pipelines:
    metrics/rabbitmq:
      receivers: [rabbitmq]
      processors: [batch]
      exporters: [otlphttp]

The otelcol-contrib systemd unit loads /etc/otelcol-contrib/otelcol-contrib.conf as an environment file, so supply the password there:

/etc/otelcol-contrib/otelcol-contrib.conf
RABBITMQ_PASSWORD=<monitoring-password>

Validate, restart, and watch the logs:

sudo /usr/bin/otelcol-contrib validate --config /etc/otelcol-contrib/config.yaml
sudo systemctl restart otelcol-contrib
sudo journalctl -u otelcol-contrib -f

Use the RabbitMQ Prometheus plugin

RabbitMQ recommends Prometheus for long-term production monitoring. Use this path when you run a newer RabbitMQ version, need broader node metrics, or do not want the Collector to query the Management API.

Enable the plugin, which exposes metrics on port 15692:

rabbitmq-plugins enable rabbitmq_prometheus
curl http://<rabbitmq-host>:15692/metrics

Add a Prometheus receiver and a separate metrics pipeline. Use either this pipeline or metrics/rabbitmq, unless you intentionally want both metric sets:

config.yaml
receivers:
  prometheus/rabbitmq:
    config:
      scrape_configs:
        - job_name: rabbitmq
          scrape_interval: 30s
          static_configs:
            - targets: ["<rabbitmq-host>:15692"]

service:
  pipelines:
    metrics/rabbitmq-prometheus:
      receivers: [prometheus/rabbitmq]
      processors: [batch]
      exporters: [otlphttp]

The aggregated endpoint suits most deployments. Per-object metrics can create high cardinality on installations with many queues or connections. See RabbitMQ's Prometheus monitoring guide before enabling them.

Validate

Metrics

  1. In SigNoz, open Metrics.
  2. Search for rabbitmq.message.current.
  3. Run a query and group by rabbitmq.queue.name to confirm that queue-level series arrive.
RabbitMQ metrics in the SigNoz Metrics Explorer
RabbitMQ metrics in SigNoz, filtered by service.name = rabbitmq

Logs

  1. In SigNoz, open Logs.
  2. Filter for service.name = rabbitmq (VM and Docker). On Kubernetes, pod logs arrive without that attribute, so filter by the RabbitMQ pod or namespace instead (k8s.pod.name or k8s.namespace.name).
  3. Restart a test node or open and close a client connection to generate a fresh entry.
RabbitMQ logs in the SigNoz Logs Explorer
RabbitMQ logs in SigNoz, filtered by service.name = rabbitmq

Data Collected

The rabbitmq receiver enables queue-level metrics by default:

MetricWhat it measures
rabbitmq.consumer.countConsumers attached to a queue
rabbitmq.message.currentMessages currently in a queue
rabbitmq.message.publishedMessages published to a queue
rabbitmq.message.deliveredMessages delivered to consumers
rabbitmq.message.acknowledgedMessages acknowledged by consumers
rabbitmq.message.droppedUnroutable messages dropped by RabbitMQ

See the RabbitMQ receiver metric reference for types, units, and attributes. Node and exchange metrics are available but disabled by default.

Troubleshooting

RabbitMQ metrics do not appear

  • Confirm rabbitmq_management is enabled with rabbitmq-plugins list.
  • Verify that the Collector reaches http://<rabbitmq-host>:15672/api/overview.
  • Check that the monitoring user has the monitoring tag and permissions for every virtual host you expect to see.
  • Inspect Collector errors with sudo journalctl -u otelcol-contrib -f.
  • If you use the prebuilt dashboard, confirm your metric names start with rabbitmq.. Prometheus plugin metrics use different names.

RabbitMQ logs do not appear

  • Run sudo rabbitmq-diagnostics -q log_location again and compare it with the receiver's include path.
  • Verify file access with sudo -u otelcol-contrib test -r <rabbitmq-log-path>.
  • Confirm that new lines are JSON objects after RabbitMQ restarts.
  • Generate a new event, since start_at: end does not ingest lines written before the Collector starts.
  • Check for parser and permission errors with sudo journalctl -u otelcol-contrib -f.

Logs appear twice

Use one log collection path per RabbitMQ instance. Disable filelog/rabbitmq if Docker or Kubernetes log collection already reads the container's stdout.

Next Steps

Get Help

If you need help with the steps in this topic, please reach out to us on SigNoz Community Slack. If you are a SigNoz Cloud user, please use in product chat support located at the bottom right corner of your SigNoz instance or contact us at cloud-support@signoz.io.

Last updated: July 22, 2026

Edit on GitHub

Was this page helpful?

Your response helps us improve this page.