被动模式工作原理:
相比与主动模式中服务器主动去被监控机上轮询获取监控数据的方式,被动模式则是在被监控机上面通过插件或脚本获取监控数据,然后将数据通过send_nsca发往监控机,最后监控机通过Nsca接收并解析数据,并传递给Nagios。这样做的一个很大的优势就是将除去处理数据的其他工作都放在了被监控机上面(包括了数据的传输),这样就避免了被监控机数量大时,一次轮询时间过长而导致监控反应延迟,这也是被动模式能承担更大监控量的关键
NSCA由两个部分组成:
Nsca
(安装在MonitorServer上,用来接收并解析MonitorClient发来的监控数据,传递给nagios)
Send_nsca(安装在MonitorClient上,用来发送监控数据。)
过程如下:
在MonitorClient上面,使用nagios-plugins提供的插件,得出监控数据,然后将数据存为一个文件,利用输入重定向,通过send_nsca将数据发往MonitorServer。MonitorServer上面运行一个nsca的daemon(默认开启5667端口),用来接收这些数据,然后做一个简单的处理(会和nagios的service文件进行对应,将多余的监控数据排除),然后将数据进行格式的转换,发给nagios的“外部命令文件”(默认配置为“/usr/local/nagios/var/rw/nagios.cmd”在nagios.cfg中定义的)。
该文件是一个管道文件,也是nagios主程序的一个接口(用来接收监控数据),使用cat查看该文件时候,会出来经nsca处理后的数据格式。然后nagios主程序对数据进行处理(前台展示,警报)。
实现过程-- Nagios所在主机(MonitorServer)
1、配置nagios(nagios安装参考其他文件)
1)修改配置文件nagios.cfg
check_external_commands = 1(enable commands file)
command_check_interval = -1(check the external command file as often as possible )
2)添加模板(template.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
notifications_enabled 1
notification_interval 5
notification_period 24x7
contact_groups admin
register 0
}
3)定义一个command
define command{
command_name check_dummy
command_line /usr/local/nagios/libexec/check_dummy $ARG1$
}
该command对被监控机发过来的数据进行处理,check_dummy只能处理4个参数(0、1、2、其他数字)
[iyunv@vps /]# /usr/local/nagios/libexec/check_dummy 0
OK
[iyunv@vps /]# /usr/local/nagios/libexec/check_dummy 1
WARNING
[iyunv@vps /]# /usr/local/nagios/libexec/check_dummy 2
CRITICAL
[iyunv@vps /]# /usr/local/nagios/libexec/check_dummy 55
UNKNOWN: Status 55 is not a supported error state
4个参数可以代表4种状态,而监测服务一般只需要两种状态(running,sotp),硬件三种(OK warning critical)
4)再定义一个本机的被动监控service:
define service{
use passive_service
host_name localhost
service_description NSCA
check_command check_dummy!0
}
2、下载并安装nsca
wget http://nchc.dl.sourceforge.net/project/nagios/nsca-2.x/nsca-2.9.1/nsca-2.9.1.tar.gz
tar zxf nsca-2.9.1.tar.gz
cd nsca-2.9.1
./configure
make all
以上步骤检查正确执行以后:
1)、会在src目录下生成两个程序 nsca send_nsca(主程序)
2)、sample-config中会有nsca.cfg与send_nsca.cfg(配置文件)
3)、当前目录下会有一个init-script(启动脚本)
Nagios监控机(MonitorServer)操作:
cp
src/nsca /usr/local/nagios/bin/
cp
sample-config/nsca.cfg /usr/local/nagios/etc
chown nagios.nagios /usr/local/nagios/bin/nsca
chown nagios.nagios /usr/local/nagios/etc/nsca.cfg
cp
init-script /etc/init.d/nsca
chmod a+x /etc/init.d/nsca
chkconfig --add nsca
至此nsca安装完成,下面需要更改一些配置选项:(nsca.cfg)
server_address=xxx.xxx.xxx.xxx(这里务必使用对外表现的IP)
debug=1 (debug选项即log选项,写入message)
aggregate_writes=1 (能够支持更大的监控量,建议开启)
max_packet_age=60 (数据包过期时间,默认30s,但是考虑到网络因素建议设为60s)
password=xxxxxxx (密码,最基础的加密方式,也可以不设置)
3、检查配置文件是否正确:
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
4、启动nagios和nsca服务
[iyunv@localhost ~]# service nagios restart
Running configuration check...done.
Stopping nagios: done.
Starting nagios:This account is currently not available.
done.
[iyunv@localhost ~]# service nsca restart
Shutting down nsca: [FAILED]
Starting nsca: [ OK ]
[iyunv@localhost ~]# service nsca restart
Shutting down nsca: [ OK ]
Starting nsca: [ OK ]
5、测试发送数据给被动监测服务:
echo "localhost;NSCA;0;testOK"|./send_nsca -H 127.0.0.1 -d ";" -c /root/send_nsca.cfg
通过管道将数据传给send_nsca程序,send nsca再将数据发送到nsca服务,其中localhost是nsca监听的主机名,NSCA是Nagios中定义的被动监测服务的名字,0告诉nsca正常,testOK是附加信息,在web端的显示如下:
- -H 127.0.0.1是数据发往的目的地,即nagios监控机;
- -d ‘;’是数据的分隔符,默认是[TAB];
- -c /root/send_nsca.cfg是send_nsca这个发送程序的配置文件。
也可以将要发送的数据写入一个文件,如/root/info.txt,用下面命令发送数据:
./send_nsca -H 127.0.0.1 -d ; -c /root/send_nsca.cfg < /root/info.txt
实现过程—Nagios被监控主机(MonitorClient)
1、Send_nsca安装在MC上面,将nagios主机build出来的send_nsca与send_nsca.cfg拷贝至MC上面,即完成安装。
2、撰写脚本或者其他程序调用NRPE插件,将插件的执行结果透过send_nsca发送到nagiso所在的主机。参考shell脚本如下:
#!/bin/bash
serverhost="testsvr"
sheckCMD="/usr/local/nagios/libexec/check_mem.sh -w 80% -c 90%"
servicName="check mem"
send_nsca="/usr/local/nagios/bin/send_nsca"
send_nsca_cfg="/usr/local/nagios/etc/send_nsca.cfg"
nagiosHost="10.21.1.77"
result=$($checkCMD)
status=$?
echo "$status" "$result"
echo "$serverhost;$servicName;$status;$result"|$send_nsca -H $nagiosHost -d ";" -c $send_nsca_cfg
参考:
http://blog.iyunv.com/uid-23886490-id-3150556.html
http://www.cszhi.com/20120527/nagios-nsca.html
http://www.codelast.com/?p=2213
|