转:ActiveMQ小记(一):监控

  1. 搭建
    建议自己clone github https://github.com/apache/activemq 下来,然后编译,打包,方便以后进行改造
    网上很多关于之类的demo,本文不再赘述,详情可参考:http://my.oschina.net/Auhgnahz/blog/551620?fromerr=o3purd6Y
  2. 监控管理
    一般,公司都希望对一些数据,程序监控,才能上生产,而ActiveMQ的监控无非是如下几部分:
    1)监控硬件物理空间是否充足

    • ActiveMQ有3个重要的参数,存储空间百分比,内存空间百分比和临时空间百分比。这三个参数的意义很明显,如果值到了100,则表明硬件空间已满,Broker不能再接受任何的消息了,除非有消息消费并且删除,Broker才可以再接收消息。

    • 如果这些值长时间都比较高,接近阀值,则表示硬件的配置不能满足要求,建议更换硬件,或者给予ActiveMQ的环境配置比较小,建议给予更多的资源给ActiveMQ。

    • 如果平时保持在一个稳定值,有一段时间突然增高,则有两种可能。一种可能是用户量大增,另一种可能是某个或者某几个消息消费者死机了。需要人工干预重启。
      2)监控队列

    • 如果ActiveMQ使用队列,需要监控队列的未消费消息数量,消费者数量,消息入队和出队的数量

    • 未消费消息数量的含义和监控硬件的内存和硬盘空间差不多,过多的消息堆积可能是有消息消费者死机

    • 消费者数量应该是一个相对固定的值,这个值减少,就直接表示有的消费者已经死机

    • 消息入队和出队数量如果增长缓慢或者不增长,则表示消息发送者已经死机。一般是通过增量监控
      3)监控主题
      如果ActiveMQ使用主题,需要监控的内容和队列相似,但是没有未消费的消息数量。这里指的注意的是,ActiveMQ提供Advisory Message,用于帮助使用统计一些额外信息,具体可查看官方文档:http://activemq.apache.org/advisory-message.html
      4)监控订阅者

    • 同样,如果ActiveMQ使用主题,订阅者的信息就十分重要。需要监控已经下线的订阅者。

如下是ActiveMQ的展示页面:

第一步:修改activemq.xml
修改conf目录下的activemq.xml文件,大概在70行左右,开启managementContext


  1. 建议:jmxDomainName以默认配置,否则,./activemq stop将关闭不了,如下图:
    详见:https://issues.apache.org/jira/browse/AMQ-3082
    或者使用嵌入式Broker,详情见: http://activemq.apache.org/how-do-i-embed-a-broker-inside-a-connection.html

第二步:创建JMXConnector

  1. public class StateMonitor {
  2. private static final String connectorPort = “1099”;
  3. private static final String connectorPath = “/jmxrmi”;
  4. private static final String jmxDomain = “jmx-domain”;// 必须与activemq.xml中的jmxDomainName一致
  5. public static void main(String[] args) throws Exception {
  6. JMXServiceURL url = new JMXServiceURL(“service:jmx:rmi:///jndi/rmi://localhost:” + connectorPort + connectorPath);
  7. JMXConnector connector = JMXConnectorFactory.connect(url);
  8. connector.connect();
  9. MBeanServerConnection connection = connector.getMBeanServerConnection();
  10. ObjectName name = new ObjectName(jmxDomain + “:brokerName=localhost,type=Broker”);
  11. BrokerViewMBean mBean = MBeanServerInvocationHandler.newProxyInstance(connection, name, BrokerViewMBean.class, true);
  12. for (ObjectName queueName : mBean.getQueues()) {
  13. QueueViewMBean queueMBean = MBeanServerInvocationHandler.newProxyInstance(connection, queueName, QueueViewMBean.class, true);
  14. System.out.println(“\n——————————\n”);
  15. // 消息队列名称
  16. System.out.println(“Queue Name — ” + queueMBean.getName());
  17. // 队列中剩余的消息数
  18. System.out.println(“Queue Size — ” + queueMBean.getQueueSize());
  19. // 消费者数
  20. System.out.println(“Number of Consumers — ” + queueMBean.getConsumerCount());
  21. // 出队数
  22. System.out.println(“Number of Dequeue —” + queueMBean.getDequeueCount());
  23. }
  24. }
  25. }
    一般可通过mBean获取所需要的监控信息!!!
    此案例,只是一个简单的配置,要是上生产,则需要修改,进行实时的监控,可参考:https://github.com/liaomengge/spring-activemq

附:ActiveMQ常用的几个命令
activemq list — 列出当前Broker名字
activemq bstat — 显示当前Broker的统计信息
activemq browse — 可以查询当前Broker为被消费的消息,会显示消息的详细信息,如消息头,消息内容,优先级等
activemq dstat —可以用来查询队列的关键数值,如队列大小,生产者消费者数量,消息出队入队统计等。还可以支持通过类别查询,如只查询队列或者只查询主题
activemq console — 以控制台启动activemq,便于查看启动的详情

参考文章:
http://www.tuicool.com/articles/ammUNn
http://my.oschina.net/jinghaichao/blog/57318?fromerr=0KwRYEGf
http://activemq.apache.org/jmx.html

来自 https://blog.csdn.net/liaomengge/article/details/51292310

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值