#RabbitMQ 监控(一)
本RabbitMQ监控博文内容均来自于《RabbitMQ实战高效部署分布式消息队列》一书。书籍上的代码是使用Python实现的,我用Java尝试了一下,该系列代码都在我的github上。
监控RabbitMQ并不只是确保端口5672是开启的并能接收TCP连接而已,对于这样复杂的系统,需要能够模拟AMQP客户端来确保连接之后获取信道、使用REST API来找出所有构成Rabbit的Erlang部件都正常运行,并且它们之间能正确通信的话才能算是一个完整的健康检测程序。
##1.为Nagios编写健康检测 我对监控框架不是很了解,只知道我司使用的是Zabbix,Zabbix也支持多语言、自定义监控脚本等。Nagios健康检测是一个独立的程序,它在运行时监控服务并在程序终止运行时退出代码来指示服务的健康状况。Nagios健康检测可以用任何语言编写,检测程序需要将可读状态打印到STDOUT上,并且返回下列四种整形退出代码之一:
* 0——OK——接收检测的服务工作正常,并且各项指标都处于通过命令行参数设定的阀值之内。
* 1——WARNING——服务运行处于退化状态(或者说是遇到了问题),但是这个问题并不紧急。
* 2——CRITICAL——服务关闭了,无响应,并且/或者超过了受监控的临界度量阀值。
* 3——UNKNOWN——从技术上来讲,这意味着服务的状态或者监控的度量值无法确定。
在理解Nagios期望从健康检测程序中获得的值之后,首先需要编写一个返回Nagios状态代码的健康检测程序。 ###清单1.1 返回Nagios状态代码的健康检测程序
1.状态码枚举 ExitType.java
/**
* 健康检测程序的几种状态
*/
public enum ExitType {
WARN("warning"),
CRITICAL("critical"),
UNKNOWN("unknown"),
OK("ok");
private String value;
ExitType(String value) {
this.value = value;
}
public String getValue() {
retur