Un script de monitoring ultra simpliste
Par Yves Tannier le mercredi, février 27 2008, 13:41 - Le codage - Lien permanent
Loin de Nagios et de ses innombrables possibilités, voici un script bash minimaliste pour tester la disponibilité d'une machine ou plusieurs machines via un ping et recevoir, en cas de non réponse, les alertes par SMS[1] et/ou mail. Le principe est le suivant :
- on teste toutes les X minutes la disponibilité des hôtes
- si une machine est détectée down, on le note dans un fichier temporaire
- si 5 minutes après la machine est toujours down, on lance les alertes
- quand la machine est de nouveau up, on renvoi un mail (pas de SMS dans ce cas)
Pour configurer le script, il suffit de préciser les variables commentées au début du fichier.
#!/bin/bash
# pingTest par Yves et Thierry
# http://www.grafactory.net/blog/
# 2008 / Licence LGPL
# les hotes a tester
HOSTS="domain.tld autredomaine.tld"
# sujets des mails
SUBJECT="machine down"
SUBJECT_UP="machine up"
# envoyer un SMS via tm4b.com
EMAILID="moi@domain.tld"
TELID="XXXXX"
PASSWD="XXXXX"
# envoyer un simple mail
EMAILSIMPLE="moi@domain.tld"
# nombre test
COUNT=4
for myHost in $HOSTS
do
if ! ping -q -c $COUNT $myHost >> /dev/null
# elle est KO
then
if [ ! -f /tmp/mail.$myHost ]
# on n est pas encore au courant
then
if [ -f /tmp/ping.$myHost ]
# elle etait KO cinq minutes avant, faut prevenir
then
# envoyer un SMS
echo "To - $TELID\nFrom - $TELID\nMessage - La machine $myHost ne repond plus a $(date)\nPassword - $PASSWD" |\
mail -s "[$myHost] $SUBJECT" $EMAILID
# envoyer un mail normal
echo "La machine $myHost ne repond plus a $(date)" |\
mail -s "[$myHost] $SUBJECT" $EMAILSIMPLE
# creer le fichier pour indiquer que le mail a ete envoye
touch /tmp/mail.$myHost
fi
touch /tmp/ping.$myHost
fi
else
# elle n est pas KO
if [ -f /tmp/ping.$myHost ]
then
rm /tmp/ping.$myHost
fi
if [ -f /tmp/mail.$myHost ]
then
rm /tmp/mail.$myHost
# renvoyer un mail
echo "La machine $myHost repond a nouveau a $(date)" |\
mail -s "[$myHost] $SUBJECT_UP" $EMAILSIMPLE
fi
fi
done
Dans la crontab, on ajoute la ligne suivante (ici, un test toute les 5 minutes).
# faire un test de ping toutes les 5 min */5 * * * * /usr/local/sbin/pingtest >> /dev/null
(on suppose donc ici que le script est installé dans /usr/local/sbin/)
Toutes les améliorations sont les bienvenues 

Commentaires
Merci pour ce script, je le test de suite. Par contre je recherche aussi quelque chose pour voir si la memoire est ok, si il y a pas un truc qui cloche ?
Merci
Question bête peut être mais pas pour tous je pense. Le fichier doit être nommé pingtest.sh ?
Merci