ActiveMQ Monitoring with JMX Exporter, Prometheus, and Grafana
Overview
This guide explains how to monitor ActiveMQ using JMX Exporter in standalone mode, with metrics collected by Prometheus and visualized in Grafana. It also includes an alert rule for detecting stalled queues.
1. Prepare JMX Exporter on the ActiveMQ Host
1.1 Create the Exporter Directory
sudo mkdir -p /opt/monitoring/activemq-exporter
sudo chown qcuser:qcuser /opt/monitoring/activemq-exporter
cd /opt/monitoring/activemq-exporter
1.2 Download the Standalone JMX Exporter
curl -Lo jmx_exporter_standalone.jar \
https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_httpserver/0.20.0/jmx_prometheus_httpserver-0.20.0.jar
1.3 Create the Configuration File config.yml
startDelaySeconds: 0
jmxUrl: service:jmx:rmi:///jndi/rmi://127.0.0.1:1099/jmxrmi
username: amqusername
password: amqpasswd
lowercaseOutputName: true
lowercaseOutputLabelNames: true
1.4 Create docker-compose.yml
version: '3.8'
services:
activemq-exporter:
image: openjdk:17-slim
container_name: activemq-exporter
network_mode: host
volumes:
- ./config.yml:/config.yml:ro
- ./jmx_exporter_standalone.jar:/exporter.jar:ro
command:
- sh
- -c
- |
java -jar /exporter.jar 9404 /config.yml
restart: unless-stopped
1.5 Deploy via Portainer or docker-compose up -d
2. Verify Metrics
curl http://localhost:9404/metrics
Make sure you see metrics like:
org_apache_activemq_broker_enqueuecounter{...}
org_apache_activemq_broker_dequeuecounter{...}
3. Configure Prometheus
3.1 Add Scrape Job in prometheus.yml
scrape_configs:
- job_name: 'activemq'
static_configs:
- targets: ['mgewtest:9404'] # Replace with actual exporter IP
3.2 Reload Prometheus
4. Visualize in Grafana
4.1 Create Grafana Dashboard
4.2 Custom Stat Panels
Enqueued Messages
sum(org_apache_activemq_broker_enqueuecounter{destinationname="updatecache"})
Dequeued Messages
sum(org_apache_activemq_broker_dequeuecounter{destinationname="updatecache"})
Current Queue Size
sum(org_apache_activemq_broker_enqueuecounter{destinationname="updatecache"}) - \
sum(org_apache_activemq_broker_dequeuecounter{destinationname="updatecache"})
5. Alert on Stuck Queue
5.1 Create activemq_alerts.yml for prometheus
groups:
- name: activemq.rules
rules:
- alert: QueueStuck
expr: |
(
sum(org_apache_activemq_broker_enqueuecounter{destinationname="updatecache"}) -
sum(org_apache_activemq_broker_dequeuecounter{destinationname="updatecache"})
) > 0
and
increase(org_apache_activemq_broker_dequeuecounter{destinationname="updatecache"}[10m]) == 0
for: 2m
labels:
severity: critical
annotations:
summary: "Queue 'updatecache' stuck"
description: "Queue has messages but no dequeue activity for 10+ minutes"
5.2 Include Rule File in prometheus.yml
rule_files:
- "rules/activemq_alerts.yml"
5.3 Reload Prometheus
✅ Done
You now have full monitoring of ActiveMQ:
- JMX metrics exposed and collected
- Grafana visualizations
- Alert on message pile-up
Changelog
| Date | Author | Message |
|---|---|---|
| 2026-02-25 | aresnikowa | Merge remote-tracking branch 'origin/master' |