@cdmonkey
2015-04-30T11:03:24.000000Z
字数 4099
阅读 1214
Nagios
如果是被动模式(即通过NRPE的监控方式),则首先要在被监控端对插件进行确认与定义。
#首先检查客户端的『nrpe.cfg』文件中已经定义了那些监控指令:
[root@WEB-A1 ~]# vim /usr/local/nagios/etc/nrpe.cfg
command[check_load]=/usr/local/nagios/libexec/check_load -w 15,10,6 -c 30,25,20
command[check_mem]=/usr/local/nagios/libexec/check_memory.pl -w 6% -c 3%
command[check_disk]=/usr/local/nagios/libexec/check_disk -w 20% -c 8% -p /
command[check_swap]=/usr/local/nagios/libexec/check_swap -w 20% -c 10%
command[check_iostat]=/usr/local/nagios/libexec/check_iostat -w 6 -c 10
#首先查看系统自带的插件:
[root@WEB-A1 ~]# ll /usr/local/nagios/libexec/
...
-rwxr-xr-x 1 root root 103176 Dec 7 22:25 check_ssh
-rwxr-xr-x 1 root root 108558 Dec 7 22:25 check_swap
-rwxr-xr-x 1 root root 105198 Dec 7 22:25 check_time
...
其次,要在服务端添加服务及命令的定义:
#定义所要监控的项目(服务):
[root@Nagios ~]# vim /usr/local/nagios/etc/objects/services.cfg
define service {
use generic-service
host_name WEB-A1,WEB-A2
service_description Check Memory
check_command check_nrpe!check_mem
}
--------------------------
#定义监控项目中使用到的命令:
[root@Nagios ~]# vim /usr/local/nagios/etc/objects/commands.cfg
define command{
command_name check_nrpe
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}
即增加从Nagios服务器端发起的监控,例如对URL地址、端口的监控等。这类被监控对象一般都属于向外部提供服务的业务。对这样的业务,我们一般采取主动监控模式。这种模式无需通过NRPE,而完全由Nagios服务端主动发起监控,进而直接获取到监控信息。
#我们通过在服务端执行指令来检测客户端的80端口:
[root@Nagios libexec]# ./check_tcp -H 172.16.1.10 -p 80
TCP OK - 0.006 second response time on port 80|time=0.005889s;;;0.000000;10.000000
#也可以监控Web服务:
[root@Nagios libexec]# ./check_http -I 172.16.1.10
HTTP OK: HTTP/1.1 200 OK - 360 bytes in 0.082 second response time |time=0.082371s;;;0.000000 size=360B;;;0
下面对站点的URL进行正式的监控。首先是定义相应的监控服务,对于服务的定义可以在services.cfg
中进行配置,也可以在我们之前定义的配置目录中新建配置文件(以.cfg
结尾的文件),然后进行配置。
#无论是主动监控还是被动监控,我们首先都要定义服务(监控的对象)。
[root@Nagios ~]# cd /usr/local/nagios/etc/services/
[root@Nagios services]# vim web.cfg
define service{
use generic-service
host_name WEB-A1
service_description Check Web URL
check_command check_weburl!-I 172.16.1.10
#注意,既然是主动模式,在配置指令时就要指定具体的监控目标。
max_check_attempts 3
normal_check_interval 2
retry_check_interval 1
check_period 24x7
notification_interval 30
notification_period 24x7
notification_options w,u,c,r
contact_groups admins
}
其次,我们要对监控指令check_weburl
进行定义。
[root@Nagios services]# vim ../objects/commands.cfg
#添加下面的指令定义内容:
define command{
command_name check_weburl
command_line $USER1$/check_http $ARG1$ -w 10 -c 30
}
---------------------
#当然这里也可以使用系统预定义的指令,都是可以的。
define command{
command_name check_http
command_line $USER1$/check_http -I $HOSTADDRESS$ $ARG1$
}
最后检查语法并重新加载配置文件。
[root@Nagios services]# /etc/init.d/nagios checkconfig
Total Warnings: 0
Total Errors: 0
Things look okay - No serious problems were detected during the pre-flight check
OK.
[root@Nagios services]# /etc/init.d/nagios reload
Running configuration check...done.
Reloading nagios configuration...done
#至此主动监控模式配置完成。
主动监控模式的配置过程:
① 在服务端的命令行把要监控的命令调试好。
② 在commands.cfg
文件里定义Nagios命令,同时调用命令行的插件。
③ 在服务的配置文件里定义要监控的服务,调用commands.cfg
里定义的监控指令。
Nagios插件程序中需要调用监控服务规定的操作序列,并根据预先定义的规则,对返回结果进行分析,判断服务的当前状态,并以指定的状态码退出程序,同时将对该状态的说明不换行输出到控制台。Nagios的插件可以用脚本(Shell和Perl)C编译后的可执行程序,但必须满足以下两件事:
首先要在客户端编写插件,并进行定义。
第一步:编写插件脚本
[root@WEB-A1 ~]# cat /usr/local/nagios/libexec/check_www
#!/bin/sh
status=`curl -I -s 172.16.1.10|grep HTTP`
code=`$status|awk '{print $2}'`
if [[ $code -eq 200 ]]
then
echo "The HTTP service is running, and the Web is OK!"
exit 0
elif [ -z $code ]
then
echo "The HTTP service is down!"
exit 2
else
echo "The HTTP service is running, but $status"
exit 2
fi
--------------------------
#上面脚本的问题:首先,取到站点的首页的HTTP状态码的方法笨拙,一条curl指令就完全可以搞定。
[root@WEB-A1 ~]# code=`curl -I -o /dev/null -w%{http_code} -s 172.16.1.10`
[root@WEB-A1 ~]# echo $code
200
#其次,对于状态码的判断不合理,类似301这类的状态码不该归为错误类。
第二步:赋予插件可执行权限
[root@WEB-A1 ~]# chmod +x /usr/local/nagios/libexec/check_www
第三步:定义插件
[root@WEB-A1 ~]# vim /usr/local/nagios/etc/nrpe.cfg
command[check_www]=/usr/local/nagios/libexec/check_www
第四步:重启NRPE服务
在服务端应该首先在命令行中对命令进行测试,测试正常后执行下面的操作:
第一步:定义服务
[root@Monitor ~]# vim /usr/local/nagios/etc/objects/services.cfg
define service {
use generic-service
host_name WEB-A1
service_description Check Web
check_command check_nrpe!check_www
}
第二步:验证配置文件后重启Nagios服务
[root@Monitor ~]# /etc/init.d/nagios checkconfig
[root@Monitor ~]# /etc/init.d/nagios restart