如何在New Relic中动态暴露并查看ActiveMQ队列与主题
解决ActiveMQ通过JMX接入New Relic基础设施代理仅显示少量队列/主题的问题
修正JMX查询的通配符用法
ActiveMQ的JMX对象名支持*作为通配符匹配任意字符,你需要将配置中的具体名称替换为*,同时覆盖所有Broker、主题和队列:
# 采集所有Topic - query: type=Broker,brokerName=*,destinationType=Topic,destinationName=* attributes: - AlwaysRetroactive - AverageBlockedTime - AverageEnqueueTime # 保留你需要的其他属性 # 采集所有Queue - query: type=Broker,brokerName=*,destinationType=Queue,destinationName=* attributes: - ConsumerCount - DequeueCount - EnqueueCount # 保留你需要的其他属性
调整代理的采集实例限制
New Relic基础设施代理默认会限制单个JMX查询返回的实例数量,导致部分队列/主题无法被采集。添加max_instances参数设置足够大的值,同时用allow_missing: true避免因个别属性缺失导致采集失败:
- query: type=Broker,brokerName=*,destinationType=Topic,destinationName=* max_instances: 100 # 根据实际队列/主题数量调整 allow_missing: true attributes: # 属性列表
验证JMX查询有效性
用JMX工具(如jconsole或jmxterm)连接ActiveMQ的JMX端口,确认查询能返回所有目的地实例:
- 使用jmxterm连接(替换为你的JMX地址和凭证):
jmxterm -l localhost:1099 -u admin -p admin
- 执行查询:
beans type=Broker,brokerName=*,destinationType=Topic,destinationName=*
如果工具能返回所有主题,说明查询逻辑正确,问题出在代理配置;如果工具也只能返回少量实例,需要检查ActiveMQ的JMX暴露配置。
检查ActiveMQ的JMX配置
确保ActiveMQ的activemq.xml中开启了完整的JMX暴露:
- 确认broker节点设置了
useJmx="true" - 检查是否存在
destinationJMXFilter参数限制了暴露的目的地,若有则移除或调整过滤规则
内容的提问来源于stack exchange,提问作者Kate Baya
相关产品推荐
相关产品推荐

