Gargi
11.09.2009, 20:05
Für den Voicechat Server Voicechatter (http://www.voicechatter.org) habe ich ein kleines Nagiosplugin geschrieben. Dieses Plugin soll einen aktiven voicechatter Server überwachen. Sollte dieser ausgefallen sein, dann soll er neu gestartet werden. Den Check habe ich via ssh eingebunden (in meinem Beispiel). Das lässt sich natürlich auch auf den NRPE übertragen.
Zuerst das Startscript:
VCHAT SERVER:
/usr/local/bin/vc_start
#!/bin/sh
pkill -u voicechatuser
su voicechatuser -c 'screen -S server1 -d -m /opt/voicechatterserver/voicechatterserver --config /opt/voicechatterserver/vchatserver.conf'
Ihr seht hier, dass ein voicechatuser notwendig ist. Der Server sollte nicht als root gestartet werden. Falls noch nicht geschehen, legt einen entsprechenden User an!
Jetzt das Checkupscript:
VCHAT SERVER:
/usr/local/share/nagios3/plugins/check_vchat
#!/bin/bash
#Parameters
limit=$1
SECOND_CHECK=0
STATE_OK=0
STATE_CRITICAL=2
top -b -n 1 | grep voicechat > /dev/null
serverstate=$?
if [ $serverstate = 0 ]; then
exit_vchattest=$STATE_OK
else
exit_vchattest=$STATE_CRITICAL
fi
final_exit=$exit_vchattest
if [ $final_exit -eq 0 ]; then
echo "OK - Vchatterserver ALIVE"
exitstatus=$STATE_OK
elif [ $final_exit -ne "0" ]; then
echo "WARNING - Vchatterserver DEAD"
exitstatus=$STATE_CRITICAL
fi
exit $exitstatus
Damit der Eventhandler auch als vchatuser das Startskript auslösen kann legt noch eine Zeile in den sudoers an:
visudo
Die Zeile:
nagios ALL=(root) NOPASSWD: /usr/local/bin/vc_start
NAGIOS SERVER
Eventhandlerskript:
/usr/local/share/nagios3/eventhandlers/restart_vchat
#!/bin/bash
# $1 = Status $2 = Zustandstyp $3 = Versuch $4 = Host
case $1 in
OK)
;;
WARNING)
;;
CRITICAL)
if [ $2 == "HARD" ] || [[ $2 == "SOFT" && $3 -eq 3 ]]; then
ssh $4 -i /home/nagios/.ssh/id_dsa "sudo /usr/local/bin/vc_start"
fi
;;
UNKNWON)
;;
esac
exit 0
Jetzt dann auf Seiten des Nagiosservers folgende Definitionen:
Checkservice:
# 'ssh_check_vchat' command definition
define command{
command_name ssh_check_vchat
command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa -C "/usr/local/share/nagios3/plugins/check_vchat"
}
Eventhandler:
define command{
command_name restart_vchat
command_line /usr/local/share/nagios3/eventhandlers/restart_vchat $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$ $HOSTADDRESS$
}
Dienst einbinden:
define service {
host_name MyServer
service_description Voicechat Server
check_command ssh_check_vchat
use generic-service
event_handler restart_vchat
}
Danach startet den Nagiosserver neu:
/etc/init.d/nagios3 reload
Voicechatterserver offline:
http://www.gargi.org/stuff/sonstiges/nagios_vchat1.png
Nachdem der Eventhandler zugeschlagen hat ist der Server wieder online:
http://www.gargi.org/stuff/sonstiges/nagios_vchat2.png
Viel Spaß!
cu
Gargi
Zuerst das Startscript:
VCHAT SERVER:
/usr/local/bin/vc_start
#!/bin/sh
pkill -u voicechatuser
su voicechatuser -c 'screen -S server1 -d -m /opt/voicechatterserver/voicechatterserver --config /opt/voicechatterserver/vchatserver.conf'
Ihr seht hier, dass ein voicechatuser notwendig ist. Der Server sollte nicht als root gestartet werden. Falls noch nicht geschehen, legt einen entsprechenden User an!
Jetzt das Checkupscript:
VCHAT SERVER:
/usr/local/share/nagios3/plugins/check_vchat
#!/bin/bash
#Parameters
limit=$1
SECOND_CHECK=0
STATE_OK=0
STATE_CRITICAL=2
top -b -n 1 | grep voicechat > /dev/null
serverstate=$?
if [ $serverstate = 0 ]; then
exit_vchattest=$STATE_OK
else
exit_vchattest=$STATE_CRITICAL
fi
final_exit=$exit_vchattest
if [ $final_exit -eq 0 ]; then
echo "OK - Vchatterserver ALIVE"
exitstatus=$STATE_OK
elif [ $final_exit -ne "0" ]; then
echo "WARNING - Vchatterserver DEAD"
exitstatus=$STATE_CRITICAL
fi
exit $exitstatus
Damit der Eventhandler auch als vchatuser das Startskript auslösen kann legt noch eine Zeile in den sudoers an:
visudo
Die Zeile:
nagios ALL=(root) NOPASSWD: /usr/local/bin/vc_start
NAGIOS SERVER
Eventhandlerskript:
/usr/local/share/nagios3/eventhandlers/restart_vchat
#!/bin/bash
# $1 = Status $2 = Zustandstyp $3 = Versuch $4 = Host
case $1 in
OK)
;;
WARNING)
;;
CRITICAL)
if [ $2 == "HARD" ] || [[ $2 == "SOFT" && $3 -eq 3 ]]; then
ssh $4 -i /home/nagios/.ssh/id_dsa "sudo /usr/local/bin/vc_start"
fi
;;
UNKNWON)
;;
esac
exit 0
Jetzt dann auf Seiten des Nagiosservers folgende Definitionen:
Checkservice:
# 'ssh_check_vchat' command definition
define command{
command_name ssh_check_vchat
command_line /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -i /home/nagios/.ssh/id_dsa -C "/usr/local/share/nagios3/plugins/check_vchat"
}
Eventhandler:
define command{
command_name restart_vchat
command_line /usr/local/share/nagios3/eventhandlers/restart_vchat $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$ $HOSTADDRESS$
}
Dienst einbinden:
define service {
host_name MyServer
service_description Voicechat Server
check_command ssh_check_vchat
use generic-service
event_handler restart_vchat
}
Danach startet den Nagiosserver neu:
/etc/init.d/nagios3 reload
Voicechatterserver offline:
http://www.gargi.org/stuff/sonstiges/nagios_vchat1.png
Nachdem der Eventhandler zugeschlagen hat ist der Server wieder online:
http://www.gargi.org/stuff/sonstiges/nagios_vchat2.png
Viel Spaß!
cu
Gargi