网上看了,大部分都是远程处理故障,也就是远程执行命令,需要无密码登录,配置ssh的key,既然有了check_nrpe,为何还需要远程执行,那不就是脱裤子放屁吗。
例子环境如下:
监控服务器上安装了nagios和check_nrpe,ip为192.168.0.100
被监控服务器安装nrpe的客户端,ip为192.168.0.200
客户端操作,也就是192.168.0.200操作
1、建立监控脚本,我们来监控php进程是否关掉,如果挂掉,在报警前我们重启apache,脚本名为handle_php,路径为/usr/local/nagios/libexec 如下:
#!/bin/bash
case "$1" in
OK)
echo 'ok' >> /usr/local/nagios/var/tmp.txt
;;
WARNING)
echo 'WARNING' >> /usr/local/nagios/var/tmp.txt
;;
UNKNOWN)
echo 'unknown' >> /usr/local/nagios/var/tmp.txt
;;
CRITICAL)
case "$2" in
SOFT)
case "$3" in
3)
echo 'sudo /etc/rc.d/init.d/httpd restart3' >> /usr/local/nginx/var/tmp.txt
;;
2)
echo 'sudo /etc/rc.d/init.d/httpd restart2' >> /usr/local/nagios/var/tmp.txt
;;
1)
echo 'sudo /etc/rc.d/init.d/httpd restart1' >> /usr/local/nagios/var/tmp.txt
;;
*)
echo 'critical*' >> /usr/local/nagios/var/tmp.txt
esac
;;
HARD)
#这里的sudo 以及重启的命令,仅仅打印,只是为了说明可以执行,方便测试
echo 'sudo /etc/rc.d/init.d/httpd restart' >> /usr/local/nagios/var/tmp.txt
;;
*)
echo 'aaaaaa' >> /usr/local/nagios/var/tmp.txt
;;
esac
;;
*)
#打印参数,用于测试
echo $1,$2,$3 >> /usr/local/nagios/var/tmp.txt
;;
esac
exit 0
2、测试,看看脚本是否能执行#/usr/local/nagios/libexec/handle_php CRITICAL soft 3
运行完毕后,在/usr/local/nagios/var/tmp.txt 中出现critical*,说明脚本运行没问题
command[handle_php]=sudo /usr/local/nagios/libexec/handle_php $ARG1$ $ARG2$ $ARG3$
解释一下,$ARG1$ $ARG2$ $ARG3$三个参数,用空格分开
配置文件中 dont_blame_nrpe=1 ,默认为0,大概的意思是“
这个选项决定了NRPE守护进程是否允许客户端指定执行命令的参数。 这个选项需要在安装nrpe的时候开启——enable-command-args参数,否则不能用,***启用此选项存在安全风险! ***
上面红字重要,否则,客户端脚本执行不了
重启nrpe,
killall nrpe
/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d
测试,通过在服务器上运行
/home/system/nagios/libexec/check_nrpe -H 192.168.0.200 -c handle_php -a CRITICAL SOFT 3
客户端查看/usr/local/nginx/var/tmp.txt的内容,有打印信息,客户端配置成功。
4、配置服务器端,配置主机监控文件,如下:
define service{
use hosta-service ; Name of service template to use
host_name a-192.168.0.200
service_description HTTP
check_command check_nrpe!check_http
event_handler check_nrpe!handle_php -a $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$
}
5、配置完毕,测试
重启systemctl restart nagios
经过以上配置,当触发错误信息三次的时候,发报警信息前,可以远程执行恢复命令
欢迎留言!