nagios的集群监控,是用check_cluster这个脚本来实现的,它通过读取status.dat文件,检查集群中各主机和服务的状态来得出集群状态。源代码在nagios-plugins根目录下的plugins目录下,很简单。
在commond.cfg里加集群检查的命令
define command{
command_name check_service_cluster
command_line $USER1$/check_cluster -s -l $ARG1$ -w $ARG2$ -c $ARG3$ -d $ARG4$
}
define command{
command_name check_host_cluster
command_line $USER1$/check_cluster -h -l $ARG1$ -w $ARG2$ -c $ARG3$ -d $ARG4$
}
集群在nagios其实就是一个service,需要挂在一个host的下面,可以随便找台机器,也可以用集群的vip,这个没有关系的。
举个例子,以load为例。
假设一个集群有5台机子,为cluster1-5,每台机器都加了load的监控,service_description是LOAD,集群检查挂名在cluster1这个主机下,集群的的定义如下:
define service{
use active-service
host_name cluster1
service_description CLUSTER
is_volatile 0
check_period 24x7
max_check_attempts 3
normal_check_interval 5
retry_check_interval 2
contact_groups cluster_admin
notification_period 24x7
notification_options w,c
notification_interval 30
check_command check_service_cluster!"cluster_load"!1!2!$SERVICESTATEID:cluster1:LOAD$,$SERVICESTATEID:cluster2:LOAD$,
$SERVICESTATEID:cluster3:LOAD$,$SERVICESTATEID:cluster4:LOAD$,$SERVICESTATEID:cluster5:LOAD$
}
check_command中,$SERVICESTATEID是服务检查中产生的宏,存放了service检测的返回值。cluster1-5就是host的名字,LOAD就是service_description。
当5台机器中有一台以上机器的load检查不正常的时候,那它的返回就是warning,有两台以上机器检查结果不正常的时候,返回就是critical了。1和2就是warning和critical的分界。
至于那个"cluster_load",这个是名字,胡编的,让你在收到报警的时候明白是哪个集群出了毛病。
如果nagios上机器量大的时候,status.dat会很大,如果加了很多的集群,对这个文件频繁读写,肯定会对系统产生不利影响,所以我用的是被动监控,在另外一台检测量小的机器上进行集群检测。
主机集群监控是类似的,不过command里的格式是这样的:
check_host_cluster!"cluster_hosts"!1!2!$HOSTSTATEID:cluster1$,$HOSTSTATEID:cluster2$,$HOSTSTATEID:cluster3$,
$HOSTSTATEID:cluster4$,$HOSTSTATEID:cluster5$
没有了服务的名字,检测的宏也变成了$HOSTSTATEID。
个人建议,在单台机器或者服务的contacts可以写一些级别比较低的报警,比如说email;在集群服务的contacts可以写一些响应比较快的报
警,比如说手机短信。这样非工作时间,集群内一台两台机器出了问题,在不影响集群应用的时候,就不会去发那么多短信来打扰别人睡觉,而当集群真的出现问题
的时候,才会发短信通知人上线处理,上线以后可以检查电子邮箱,就知道具体报警的是集群里的哪些机器了。减少报警数量,提高报警的质量,这就是我们的目
的,哈哈~~
阅读(2305) | 评论(0) | 转发(0) |