Nagios被动监测的实现-NSCA

转自:http://www.codelast.com/?p=2213

 

本文环境:RHEL 5.3 x64

 

 

被动监测,就是指由被监测的服务器主动上传数据到Nagios监控系统中。这种监测方式提高了实时性(出现问题的时候,被监测的服务器可以及时上传数据通知Nagios,从而使管理员可以尽快作出处理,而不用像主动监测中一样,非要等到下一个监测周期才能获知被监测服务器的状态)。NSCA就是可以实现Nagios被动监测的一个程序。

现在(2011年),NSCA的最新版本已经是4年前了的——2007年的,不要觉得奇怪,就是这么“过时”。
这里去下载NSCA,得到压缩包 nsca-2.7.2.tar.gz ,解压出来,先configure,再make all。

安装NSCA需要系统中已经安装libmcrypt库,否则不能使用加密数据传输功能,configure的时候会提示:

*** Could not run libmcrypt test program, checking why…

*** The test program failed to compile or link. See the file config.log for the

*** exact error that occured. This usually means LIBMCRYPT was incorrectly installed

*** or that you have moved LIBMCRYPT since it was installed. In the latter case, you

*** may want to edit the libmcrypt-config script: no

可以到这个网址去查看关于该库的更详细的信息,到这里去下载。如果你不需要加密传输,则可以忽略这个问题,照样能编译安装。如果你一直装不上这个东西,我建议你不要纠结于这个问题,不理会它即可。

文章来源:http://www.codelast.com/

然后,你需要把编译出来的一些文件拷贝到与Nagios相关的几个目录下。

注意:下面的描述中所涉及的路径,都是相对于默认安装的Nagios来说的,如果你在安装Nagios的时候自定义了安装目录,那么你也要做相应的更改。

进入NSCA的编译目录:

cd nsca-2.7.2/

将NSCA的可执行程序拷贝到Nagios的bin目录下:

cp src/nsca /usr/local/nagios/bin/

将NSCA的示例配置文件拷贝到Nagios的etc目录下:

cp sample-config/nsca.cfg /usr/local/nagios/etc/

修改NSCA的配置文件 /usr/local/nagios/etc/nsca.cfg,要修改的地方一般来说只有这几处:

server_address=XXX.XXX.XXX.XXX

这里改成你的IP地址。如果有多块网卡,那么这里就填写你想让NSCA监控的那块网卡的IP地址(当然,客户端向NSCA发送被动监测数据时,也要保证数据是从这块网卡上过的,否则NSCA将接不到数据)。

password=XXX

这里改成你设置的密码,即客户端向NSCA发送被动监测数据时,需要提供这个密码,否则将无法成功发送。

如果你没有特殊需求,其余参数不用修改。

然后修改NSCA配置文件的权限:

chown nagios.nagcmd /usr/local/nagios/etc/nsca.cfg

chmod g+r /usr/local/nagios/etc/nsca.cfg

文章来源:http://www.codelast.com/

其实这样就算安装好了NSCA,可以启动它了,但是,这并不是一个好办法,最好是在xinetd下(xinetd是一大堆服务的管理程序),以服务的形式来运行NSCA,方法如下:

(1)编辑文件 /etc/services,在最开头添加一行:

nsca            5667/tcp                        # NSCA

将编译NSCA得到的xinetd配置文件拷贝到它应该在的目录下(并同时重命名,必须的):

cp sample-config/nsca.xinetd /etc/xinetd.d/nsca

重启服务:

service xinetd restart

再查看端口是否被监听了:

netstat -an | grep 5667

输出应类似于:

tcp        0      0 0.0.0.0:5667                0.0.0.0:*                   LISTEN 

表明已被监听了——NSCA服务运行起来了。

(2)那么,NSCA如何与Nagios整合来呢?现在,就是配置Nagios的时刻了:

在service的模板文件中(如果你没有自定义的话,是/usr/local/nagios/etc/objects/templates.cfg 文件),添加一个服务模板定义:

define service{

 

        name                            passive_service

        use                             generic-service

        max_check_attempts              1

        active_checks_enabled           0

        passive_checks_enabled          1

        normal_check_interval           5

        retry_check_interval            1

        notification_interval           10

        notification_options            w,u,c,r,f,s

        }

然后就可以在你平常定义服务的文件里定义一个服务了,这里我们定义一个测试用的服务:

define service{

 

        use                             passive_service

        host_name                       localhost

        service_description             CheckDummy

        check_command                   check_dummy!0

        notifications_enabled           1

        }

这里使用了check_dummy命令,在Nagios默认安装情况下,是找不到这个命令定义的,我们手工添加上去:编辑 /usr/local/nagios/etc/objects/commands.cfg 文件,添加一个命令定义:

define command{

        command_name    check_dummy

        command_line    /usr/local/nagios/libexec/check_dummy $ARG1$

        }

OK,现在检查一下Nagios配置文件的合法性:

/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

如果没有错误的话,就可以重启Nagios服务了:

service nagios restart

文章来源:http://www.codelast.com/

(3)

一个被动监测服务已经定义好,我们该如何向它发送数据呢?怎么测试?下面,就是测试到来的时刻:

编写一个测试文件,假设为 /root/pasv.txt ,内容只有一行:

127.0.0.1[TAB分隔符]CheckDummy[TAB分隔符]0[TAB分隔符]Here we done!

其中,127.0.0.1是NSCA监听的IP地址,CheckDummy是你在Nagios中定义的被动监测服务的名字,0表示告诉NSCA服务正常(1为WARNING,2为CRITICAL,其他值均为UNKNOWN),最后的“Here we done!”是你要向服务器发送的附加信息。

然后,到编译NSCA的目录下,找到程序send_nsca,以及配置文件send_nsca.cfg,执行以下命令:

./send_nsca localhost -c ../sample-config/send_nsca.cfg < /root/pasv.txt

这里要注意

send_nsca和

send_nsca.cfg的路径。

如果输出为:

1 data packet(s) sent to host successfully.1 data packet(s) sent to host successfully.

则表明成功!

照这样的方法,你就可以让任意服务器来主动发送监测数据给Nagios了。但别忘了,如果要授权一台服务器上传数据给NSCA的话,需要修改 /etc/xinetd.d/nsca 文件的“only_from = XXX.XXX.XXX.XXX”字段,来添加更多的IP地址(同时要重启xinetd服务)——各个IP地址之间用空格隔开。