一. 介绍
nagios的事件处理(Event Handlers)可以在监控的主机或服务的状态发生变化时触发脚本或系统命令来对故障进行处理,事件处理在告警发出前发生。
事件处理会在下面情况下触发:
1). 主机或服务处于一个软态(SOFT)故障状态时;
2). 主机或服务处于一个硬态(HARD)故障状态时;
3). 主机或服务从软态或硬态的故障状态中初始恢复时;
事件处理命令可以通过各种语言脚本来完成,脚本中需要处理下面的参数:
对服务的:$SERVICESTATE$、$SERVICESTATETYPE$和$SERVICEATTEMPT$;
对主机的:$HOSTSTATE$、$HOSTSTATETYPE$和$HOSTATTEMPT$;
脚本须检测这些作为命令行参数传入的值,并采取必要动作来处理这些值。
下面通过一个简单的实例来说明,事件处理的用法。先易后难。在系统高负载的情况下,一般就登陆不了服务器,收集当时服务器状态对服务故障排查非常重要的。因此,在检测到系统负载报警的情况下,top下系统信息。
二. nagios配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
# mkdir /usr/local/nagios/libexec/eventhandlers
# cd /usr/local/nagios/libexec/eventhandlers/
# vim process_snapshot.sh
内容如下:
#!/bin/bash
case “$1” in
OK)
;;
WARNING)
/usr/local/nagios/libexec/check_nrpe –H $4 –c process_snapshot
;;
UNKNOWN)
;;
CRITICAL)
/usr/local/nagios/libexec/check_nrpe –H $4 –c process_snapshot
;;
esac
exit 0
# chmod +x process_snapshot.sh
# chown -R nagios.nagios /usr/local/nagios/libexec/eventhandlers/
|
添加命令:
1
2
3
4
5
6
7
8
9
|
# vim /usr/local/nagios/etc/objects/commands.cfg
##########################################
#
# event handlers
#
define command{
command_name process_snapshot
command_line $USER1$/eventhandlers/process_snapshot.sh $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$ $HOSTADDRESS$
}
|
配置服务使用事件处理:
1
2
3
4
5
6
7
8
|
define service{
use local–service
host_name localhost
service_description Current Load
normal_check_interval 1
check_command check_local_load!1.0,4.0,3.0!2.0,6.0,4.0
event_handler process_snapshot
}
|
打开全局事件处理
1
2
|
# vi /usr/local/nagios/etc/nagios.cfg
enable_event_handlers=1
|
三. NRPE配置
更改nrpe配置
1
2
3
4
5
|
# vi /usr/local/nagios/etc/nrpe.cfg
#定义执行的命令
command[process_snapshot]=top –cSb n 1 | tail –n +8 | sort –rn –k9 | head –n20 > /tmp/proc_snap.log
#允许命令中带有参数
dont_blame_nrpe=1
|
如果使用脚本,需要给nagios执行脚本的权限
1
2
|
# visudo
nagios ALL=(root) NOPASSWD:/usr/local/nagios/libexec/eventhandlers/XXXXXX.sh
|
四. 效果
这里只要是负载告警了就会top下当前状态信息。后面应用将精确到HARD故障状态时触发处理。