RabbitMQ Message Queue Monitoring with OpenTelemetry
Overview​
This guide explains how to set up RabbitMQ metrics collection using Scout Collector and forward them to Scout backend.
Prerequisites​
- RabbitMQ instance (standalone or cluster)
- RabbitMQ management plugin enabled
- RabbitMQ user with monitoring privileges
- Scout Collector installed
RabbitMQ Configuration​
Ensure the RabbitMQ management plugin is enabled:
# Enable management plugin
rabbitmq-plugins enable rabbitmq_management
# Verify management plugin is running
rabbitmq-plugins list | grep management
Create a dedicated monitoring user (optional but recommended):
# Create monitoring user
rabbitmqctl add_user rabbitmq_monitor <password>
# Set permissions for monitoring
rabbitmqctl set_permissions -p / rabbitmq_monitor "" "" ".*"
rabbitmqctl set_user_tags rabbitmq_monitor monitoring
# Test connectivity
curl -u rabbitmq_monitor:<password> http://localhost:15672/api/overview
Scout Collector Configuration​
receivers:
rabbitmq:
endpoint: ${RABBITMQ_HOST}
username: ${RABBITMQ_USERNAME}
password: ${RABBITMQ_PASSWORD}
collection_interval: 10s
metrics:
rabbitmq.node.disk_free:
enabled: true
rabbitmq.node.disk_free_limit:
enabled: true
rabbitmq.node.disk_free_alarm:
enabled: true
rabbitmq.node.disk_free_details.rate:
enabled: true
rabbitmq.node.mem_used:
enabled: true
rabbitmq.node.mem_limit:
enabled: true
rabbitmq.node.mem_alarm:
enabled: true
rabbitmq.node.mem_used_details.rate:
enabled: true
rabbitmq.node.fd_used:
enabled: true
rabbitmq.node.fd_total:
enabled: true
rabbitmq.node.fd_used_details.rate:
enabled: true
rabbitmq.node.sockets_used:
enabled: true
rabbitmq.node.sockets_total:
enabled: true
rabbitmq.node.sockets_used_details.rate:
enabled: true
rabbitmq.node.proc_used:
enabled: true
rabbitmq.node.proc_total:
enabled: true
rabbitmq.node.proc_used_details.rate:
enabled: true
rabbitmq.node.uptime:
enabled: true
rabbitmq.node.run_queue:
enabled: true
rabbitmq.node.processors:
enabled: true
rabbitmq.node.context_switches:
enabled: true
rabbitmq.node.context_switches_details.rate:
enabled: true
rabbitmq.node.gc_num:
enabled: true
rabbitmq.node.gc_num_details.rate:
enabled: true
rabbitmq.node.gc_bytes_reclaimed:
enabled: true
rabbitmq.node.gc_bytes_reclaimed_details.rate:
enabled: true
rabbitmq.node.io_read_count:
enabled: true
rabbitmq.node.io_read_bytes:
enabled: true
rabbitmq.node.io_read_avg_time:
enabled: true
rabbitmq.node.io_write_count:
enabled: true
rabbitmq.node.io_write_bytes:
enabled: true
rabbitmq.node.io_write_avg_time:
enabled: true
rabbitmq.node.io_sync_count:
enabled: true
rabbitmq.node.io_sync_avg_time:
enabled: true
rabbitmq.node.io_seek_count:
enabled: true
rabbitmq.node.io_seek_avg_time:
enabled: true
rabbitmq.node.io_reopen_count:
enabled: true
rabbitmq.node.mnesia_ram_tx_count:
enabled: true
rabbitmq.node.mnesia_disk_tx_count:
enabled: true
rabbitmq.node.msg_store_read_count:
enabled: true
rabbitmq.node.msg_store_write_count:
enabled: true
rabbitmq.node.queue_index_write_count:
enabled: true
rabbitmq.node.queue_index_read_count:
enabled: true
rabbitmq.node.connection_created:
enabled: true
rabbitmq.node.connection_closed:
enabled: true
rabbitmq.node.channel_created:
enabled: true
rabbitmq.node.channel_closed:
enabled: true
rabbitmq.node.queue_declared:
enabled: true
rabbitmq.node.queue_created:
enabled: true
rabbitmq.node.queue_deleted:
enabled: true
rabbitmq.node.io_read_count_details.rate:
enabled: true
rabbitmq.node.io_read_bytes_details.rate:
enabled: true
rabbitmq.node.io_read_avg_time_details.rate:
enabled: true
rabbitmq.node.io_write_count_details.rate:
enabled: true
rabbitmq.node.io_write_bytes_details.rate:
enabled: true
rabbitmq.node.io_write_avg_time_details.rate:
enabled: true
rabbitmq.node.io_sync_count_details.rate:
enabled: true
rabbitmq.node.io_sync_avg_time_details.rate:
enabled: true
rabbitmq.node.io_seek_count_details.rate:
enabled: true
rabbitmq.node.io_seek_avg_time_details.rate:
enabled: true
rabbitmq.node.io_reopen_count_details.rate:
enabled: true
rabbitmq.node.mnesia_ram_tx_count_details.rate:
enabled: true
rabbitmq.node.mnesia_disk_tx_count_details.rate:
enabled: true
rabbitmq.node.msg_store_read_count_details.rate:
enabled: true
rabbitmq.node.msg_store_write_count_details.rate:
enabled: true
rabbitmq.node.queue_index_write_count_details.rate:
enabled: true
rabbitmq.node.queue_index_read_count_details.rate:
enabled: true
rabbitmq.node.connection_created_details.rate:
enabled: true
rabbitmq.node.connection_closed_details.rate:
enabled: true
rabbitmq.node.channel_created_details.rate:
enabled: true
rabbitmq.node.channel_closed_details.rate:
enabled: true
rabbitmq.node.queue_declared_details.rate:
enabled: true
rabbitmq.node.queue_created_details.rate:
enabled: true
rabbitmq.node.queue_deleted_details.rate:
enabled: true
processors:
resource:
attributes:
- key: environment
value: ${ENVIRONMENT}
action: upsert
- key: service.name
value: ${SERVICE_NAME}
action: upsert
batch:
timeout: 10s
send_batch_size: 1024
# Export to Base14 Scout
exporters:
otlphttp:
endpoint: ${SCOUT_EXPORTER_OTLP_ENDPOINT}
tls:
insecure_skip_verify: true
service:
pipelines:
metrics:
receivers: [rabbitmq]
processors: [batch, resource]
exporters: [otlphttp]
Verification​
-
Check collector logs for errors
-
Verify metrics in Scout dashboard
-
Test RabbitMQ connectivity:
# Test RabbitMQ management API
curl -u ${RABBITMQ_USERNAME}:${RABBITMQ_PASSWORD} \
${RABBITMQ_HOST}:15672/api/overview -
Check RabbitMQ node status:
# Check node status
rabbitmqctl node_health_check
# List queues
rabbitmqctl list_queues
# Check cluster status (if clustered)
rabbitmqctl cluster_status
References​
Related Guides​
- OTel Collector Configuration - Advanced collector configuration
- Docker Compose Setup - Set up collector for local development
- Redis Monitoring - Alternative caching service monitoring guide