Chinaunix首页 | 论坛 | 博客
  • 博客访问: 139319
  • 博文数量: 19
  • 博客积分: 1416
  • 博客等级: 上尉
  • 技术积分: 273
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-22 00:49
文章分类

全部博文(19)

文章存档

2010年(4)

2009年(15)

我的朋友

分类: LINUX

2009-08-06 12:16:41

   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可以写一些响应比较快的报 警,比如说手机短信。这样非工作时间,集群内一台两台机器出了问题,在不影响集群应用的时候,就不会去发那么多短信来打扰别人睡觉,而当集群真的出现问题 的时候,才会发短信通知人上线处理,上线以后可以检查电子邮箱,就知道具体报警的是集群里的哪些机器了。减少报警数量,提高报警的质量,这就是我们的目 的,哈哈~~
阅读(2272) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:Nagios+Ndoutils故障排查实例

给主人留下些什么吧!~~