ActiveMQ的监控

现在很多公司都遵循一个准则,没有监控的程序不能上线,可见监控的重要性。这里先介绍下ActiveMQ都需要监控的内容。

监控硬件物理空间是否充足:

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

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

如果平时保持在一个稳定值,有一段时间突然增高,则有两种可能。一种可能是用户量大增(当然大家都希望是这样),另一种可能是某个或者某几个消息消费者死机了。需要人工干预重启。

还有一种可能是平时保持在一个稳定值,但是一段时间内突然降低了,则表示消息的生产者可能出现问题了。

监控队列:

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

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

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

消息入队和出队数量如果增长缓慢或者不增长,则表示消息发送者已经死机。一般是通过增量监控。

监控主题:

如果ActiveMQ使用主题,需要监控的内容和队列相似,但是没有未消费的消息数量。这里指的注意的是,ActiveMQ提供Advisory Message,用于帮助使用统计一些额外信息,详细情况在后面介绍。

监控订阅者:

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

 

介绍完需要监控的内容,下面介绍一下ActiveMQ提供的几种监控方法。

 

Web Console监控:

之所以先介绍这个,是因为Web Console是最简单的,不需要任何配置就能使用的监控方式。同时也是最直观的监控方式。

直接在浏览器访问http://activemq-host:8161/admin/。把localhost换成你activemq启动机器的ip,端口号默认是8161,可以在${ACTIVEMQ_HOME}/conf/jetty.xml中修改。默认的用户名和密码都是admin。

进入页面首先看到


其中下面的红色框中标示出的就是硬件物理空间。

然后点击上面红色框可以进入队列的监控页面。

可以看到上面所提到的队列的一些重要数据。点击傍边的Topics可以进入主题监控页面,大致差不多,就不截图了。

下面看一下订阅者监控界面。

需要重点关注的是中间红色框圈住的部分,是离线的订阅者。

这样的页面一目了然,非常适合人类观看。但是缺点是,不适合程序直接抓数据,写监控脚本,自动报警等。这时你一定发现了这张图右边红色框部分。分别提供了队列,主题和订阅者的xml数据,下图是队列的xml数据。

这样就便于程序去访问这些数据。但是缺点是数据不够全,且xml也不如json容易解析,用shell脚本解析的话比较麻烦。shell解析的话,命令行的方式才是最舒服的。

命令行监控:

ActiveMQ当然也提供了命令行监控的方式。执行${ACTIVEMQ_HOME}/bin/activemq,会列出命令行的使用帮助。请注意虽然Windows平台也可以使用这个命令行,但是仅仅限于启动ActiveMQ实例,其他命令都不能很好的支持,所以这里所说的命令行方式,都是在Linux平台上的。

限于篇幅,这里只是截取了重要的部分。可以看到命令行提供了16个命令,包括start,stop,restart,console等启动停止实例相关的命令。还有一些控制ActiveMQ Broker的命令,如create,purge等。这里主要介绍几个监控可能用得到的命令

activemq status,显示当前的ActiveMQ是否运行正常,并且能显示pid。

activemq list,列出当前Broker名字。

activemq bstat,显示当前Broker的统计信息。

activemq query,根据筛选条件显示Broker的统计信息。如:activemq query -QQueue=string_queue,是只显示string_queue这个队列的统计信息。更多使用方法可以使用activemq query --help显示帮助。

activemq browse,可以查询当前Broker为被消费的消息,会显示消息的详细信息,如消息头,消息内容,优先级等。类似于数据库的查询功能。有自己的一套查询语法但是不是很复杂,同样可以使用activemq browse --help显示帮助。需要注意的是,只有Queue才可以查询,Topic是不可以的,所以这个功能虽然强大,但是有点鸡肋。

activemq dstat,比较有用的一个功能,可以用来查询队列的关键数值,如队列大小,生产者消费者数量,消息出队入队统计等。还可以支持通过类别查询,如只查询队列或者只查询主题。

个人认为,activemq status和activemq dstat是比较常用的两个监控命令,可以使用shell,然后grep/awk解析。命令行虽然方便,但是明显缺失必要的信息,如硬件使用百分比,订阅者下线信息等。至少目前不能完成监控的全部工作,希望以后可以持续完善功能。