Prometheus 监控 ActiveMQ 全栈实战:从队列深度到消费者延迟的实时可观测性

📅 2026/7/17 20:36:51
Prometheus 监控 ActiveMQ 全栈实战:从队列深度到消费者延迟的实时可观测性
Prometheus 监控 ActiveMQ 全栈实战从队列深度到消费者延迟的实时可观测性ActiveMQ 是 Java 消息中间件的元老至今仍被大量企业用于异步通信。其队列堆积、消费者数量、内存与存储使用、消息入队/出队速率以及连接数等指标直接关系到系统的可用性和性能。Prometheus 根据 ActiveMQ 版本提供不同的监控方案ActiveMQ Classic (5.x)通过JMX Exporter暴露指标而ActiveMQ Artemis (2.x)则内置了优雅的 Prometheus 插件。本文将覆盖两种主流架构带你从零实现 ActiveMQ 的全维度可观测。1. 方案选型JMX Exporter vs Artemis 内置插件ActiveMQ 版本监控方式特点ActiveMQ Classic (5.x)使用jmx_prometheus_javaagent随 JVM 启动抓取 JMX MBean灵活可定制但需编写 YAML 规则适用于所有 5.x 版本ActiveMQ Artemis (2.x)内置metrics插件直接暴露/metrics端点官方支持开箱即用指标丰富强烈推荐建议如果是 Artemis直接使用内置插件如果还在 Classic采用 JMX Exporter。下文将分别给出配置。2. 监控 ActiveMQ Classic (5.x) 使用 JMX Exporter2.1 下载并配置 JMX 代理在 ActiveMQ 服务器上下载jmx_prometheus_javaagentwgethttps://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.20.0/jmx_prometheus_javaagent-0.20.0.jarsudomkdir/opt/activemq/prometheussudomvjmx_prometheus_javaagent-0.20.0.jar /opt/activemq/prometheus/创建规则文件/opt/activemq/prometheus/activemq_jmx.yml采集核心 MBeanstartDelaySeconds:0hostPort:127.0.0.1:1099# ActiveMQ JMX 端口默认 1099ssl:falserules:# 队列指标-pattern:org.apache.activemqtypeBroker, brokerName(.), destinationTypeQueue, destinationName(.)(QueueSize|EnqueueCount|DequeueCount|ConsumerCount|AverageEnqueueTime)name:activemq_queue_$3labels:broker:$1destination:$2type:COUNTER# 主题指标-pattern:org.apache.activemqtypeBroker, brokerName(.), destinationTypeTopic, destinationName(.)(EnqueueCount|DequeueCount|ConsumerCount)name:activemq_topic_$3labels:broker:$1destination:$2type:COUNTER# 连接数-pattern:org.apache.activemqtypeBroker, brokerName(.)(CurrentConnectionsCount|TotalConnectionsCount)name:activemq_connections_$2labels:broker:$1# 存储使用-pattern:org.apache.activemqtypeBroker, brokerName(.)(StorePercentUsage|MemoryPercentUsage|TempPercentUsage)name:activemq_usage_$2labels:broker:$1# JVM 内存与 GC-pattern:java.langtypeMemoryHeapMemoryUsage(used|max)name:jvm_memory_heap_$1-pattern:java.langtypeGarbageCollector, name(.)(CollectionCount|CollectionTime)name:jvm_gc_$1_$2可根据需要添加更多 MBean如SlowConsumer。2.2 修改启动参数编辑bin/env或activemq启动脚本在ACTIVEMQ_OPTS中添加 Java AgentACTIVEMQ_OPTS$ACTIVEMQ_OPTS-javaagent:/opt/activemq/prometheus/jmx_prometheus_javaagent-0.20.0.jar9096:/opt/activemq/prometheus/activemq_jmx.yml这里让代理监听9096端口。重启 ActiveMQ 后curl http://localhost:9096/metrics应返回指标。3. 监控 ActiveMQ Artemis (2.x) 使用内置插件Artemis 的监控极其简单只需在broker.xml中启用 metrics 插件。编辑etc/broker.xml在metrics部分添加metricsjvm-gctrue/jvm-gcpluginclass-nameorg.apache.activemq.artemis.core.server.metrics.plugins.ArtemisPrometheusMetricsPlugin//metrics如果需要暴露具体的队列/地址指标可以增加metricsjvm-gctrue/jvm-gcpluginclass-nameorg.apache.activemq.artemis.core.server.metrics.plugins.ArtemisPrometheusMetricsPluginpropertykeymetrics-pathvalue/metrics//pluginmetricnameaddress.size/metricnamequeue.message.count/metricnamequeue.consumer.count//metrics默认会在管理 HTTP 端口通常是8161上提供/metrics端点。也可以单独配置 Prometheus 端口例如在etc/bootstrap.xml中配置 Netty Acceptor。重启后访问http://localhost:8161/metrics验证。4. 配置 Prometheus 抓取4.1 对于 ActiveMQ Classic (JMX Exporter)scrape_configs:-job_name:activemq-classicscrape_interval:30sstatic_configs:-targets:[activemq-host:9096]labels:instance:mq-prodversion:5.x4.2 对于 ActiveMQ Artemis-job_name:activemq-artemisscrape_interval:30sstatic_configs:-targets:[artemis-host:8161]labels:instance:mq-prodversion:artemismetrics_path:/metrics如果 Artemis 使用独立的 Prometheus 端口如 9404直接抓取该端口。5. 核心监控指标与 PromQL5.1 Classic (基于 JMX Exporter 规则)指标含义PromQL 示例activemq_queue_QueueSize队列中待消费消息数activemq_queue_QueueSize 1000activemq_queue_EnqueueCount(Counter)入队总数rate(activemq_queue_EnqueueCount[1m])activemq_queue_DequeueCount(Counter)出队总数rate(activemq_queue_DequeueCount[1m])activemq_queue_ConsumerCount消费者数量为 0 且有 QueueSize 则告警activemq_connections_CurrentConnectionsCount当前连接数直接查看activemq_usage_StorePercentUsage存储使用百分比 80 需告警activemq_usage_MemoryPercentUsage内存使用百分比 80 需告警jvm_memory_heap_used / jvm_memory_heap_max堆内存使用率 85% 告警5.2 Artemis (内置指标)Artemis 的指标名称前缀为artemis_如指标含义PromQL 示例artemis_address_messages_total地址下消息总数可求和看全局堆积artemis_queue_message_count特定队列消息数artemis_queue_message_count{queuemyQueue}artemis_consumer_count消费者数量artemis_consumer_count 0artemis_messages_added_total入队速率rate(artemis_messages_added_total[1m])artemis_messages_acknowledged_total已确认速率对比入队看积压趋势artemis_connection_count连接数监控连接数抖动artemis_total_connection_count累计连接rate(artemis_total_connection_count[5m])artemis_disk_store_usage_ratio磁盘存储使用率 0.8 告警artemis_memory_usage/artemis_memory_max内存使用/上限artemis_memory_usage / artemis_memory_max具体指标名以/metrics输出为准不同 Artemis 版本可能略有变化但都遵循artemis_前缀。6. Grafana 仪表盘推荐ActiveMQ Artemis DashboardDashboard ID12729专为 Artemis Prometheus 插件设计展示队列、地址、消费者、内存、磁盘等。ActiveMQ Classic (JMX)ID10944基于 JMX Exporter 指标适用于 Classic 5.x。通用 JVM 监控可与 Spring Boot 或 Node Exporter 面板配合使用。导入后选择数据源将instance或broker变量映射至你的 ActiveMQ 实例。7. 告警规则实战以下规则可适配 Classic调整指标名与 ArtemisClassic 版本告警groups:-name:activemq_classic_alertsrules:-alert:ActiveMQDownexpr:up{jobactivemq-classic} 0for:1mlabels:severity:criticalannotations:summary:ActiveMQ 实例 {{ $labels.instance }} 宕机-alert:ActiveMQQueueDepthHighexpr:activemq_queue_QueueSize5000for:5mlabels:severity:warningannotations:summary:队列 {{ $labels.destination }} 深度超过 5000-alert:ActiveMQNoConsumerexpr:activemq_queue_QueueSize0 and activemq_queue_ConsumerCount 0for:2mlabels:severity:criticalannotations:summary:队列 {{ $labels.destination }} 有消息但没有消费者-alert:ActiveMQStoreUsageHighexpr:activemq_usage_StorePercentUsage80for:5mlabels:severity:criticalannotations:summary:ActiveMQ 存储使用率超过 80%Artemis 版本告警groups:-name:activemq_artemis_alertsrules:-alert:ArtemisDownexpr:up{jobactivemq-artemis} 0for:1mlabels:severity:criticalannotations:summary:Artemis 实例 {{ $labels.instance }} 宕机-alert:ArtemisQueueDepthHighexpr:artemis_queue_message_count5000for:5mlabels:severity:warningannotations:summary:Artemis 队列 {{ $labels.queue }} 消息堆积超过 5000-alert:ArtemisNoConsumerexpr:artemis_queue_message_count0 and artemis_consumer_count 0for:2mlabels:severity:criticalannotations:summary:Artemis 队列 {{ $labels.queue }} 有消息但无消费者-alert:ArtemisDiskUsageHighexpr:artemis_disk_store_usage_ratio0.8for:5mlabels:severity:criticalannotations:summary:Artemis 磁盘使用率超过 80%8. 进阶安全、多实例与性能8.1 保护指标端点Classic (JMX Exporter)通过防火墙限制 9096 端口或通过 Nginx 反代添加 Basic Auth。Artemis在broker.xml中配置metrics-security或使用管理 HTTP 端口的安全配置限制访问。8.2 多 Broker 监控ActiveMQ Classic 支持主从Master/Slave只需为每个实例配置不同的 JMX Exporter 端口分别加入 Prometheus targets。Artemis 集群的每个节点也只需各自暴露/metrics。8.3 性能开销JMX Exporter 本身开销极小内存 ~50MBArtemis 内置插件零额外成本。抓取间隔 30s 完全足够。部署完成后ActiveMQ 的队列健康、消息流转、资源消耗一目了然。任何消息堆积、消费者消失、存储爆满都能立即触发告警让消息中间件从“盲区”变为可靠的可观测组件与你的服务器、应用监控融为一体保障消息驱动的业务永续运行。