scripts de surveillances
Il s’agit de surveiller certains paramètres du serveur/poste de travail via des scripts. Ceux ci pourront envoyer des mails d’alertes, et pourront être planifiés à intervalles réguliers (une fois / jour par exemple). Ces scripts sont des idées de base à modifier selon les circonstances. (celà me sert également de pense bête pour éviter de réinventer la roue à chaque install.. 😉 )
Espace disque disponible
Ce script va surveiller l’espace disque disponible dans chaque partition, et remontera une alerte si on dépasse le seuil.
Il vaégalement créer un fichier de log dans /var/log.
#!/bin/bash
# script surveillances (espaces disques ..)
# et envoi alertes par mail
# maj : ronan le 13/8/09
# (editer nailrc et ajouter smtp=)
now=$(date +%a-%d-%b--%HH%M)
jour=$(date +%d)
destinataire="adresse@fai.fr"
# % espace disque occupé sur partitions locales :
#df -hl | awk '{ print $5 }'|grep %|cut -d% -f 1
df -k | grep /dev | while read FS
do
FS_NAME=`echo $FS | awk -F' ' '{print $6}'`
FS_SIZE=`echo $FS | awk -F' ' '{print $5}'|cut -d% -f1`
if [ $FS_SIZE -gt 95 ]; then
echo "NOM - $now serveur nom_serveur : partition $FS_NAME utilise ${FS_SIZE}% !" > /var/log/espace-disque-$jour.log
echo "." >> /var/log/espace-disque-$jour.log
#cat /var/log/espace-disque-$jour.log | nail -s "alerte--serveur" -r ronan@DOMAIN $destinataire
mail -s "alerte-nom_serveur" $destinataire < /var/log/espace-disque-$jour.log
fi
done
Autre version pour l’espace disque :
(requiert le paquet « nail »)
#!/bin/bash
# script surveillances (espaces disques ..)
# et envoi alertes par mail ou nail
# maj : ronan le 15/2/11
# (editer nailrc et ajouter smtp= ou indiquer serveur smtp dans nail
now=$(date +%a-%d-%b--%HH%M)
jour=$(date +%d)
destinataire="destinataire@domaine.com"
sujet="mail automatique : Serveur passerelle : espace disque"
serveur=126.0.0.13
expediteur="expediteur@domaine-local.fr"
# % espace disque occupé sur partitions locales :
#df -hl | awk '{ print $5 }'|grep %|cut -d% -f 1
df -k | grep /dev | while read FS
do
FS_NAME=`echo $FS | awk -F' ' '{print $6}'`
FS_SIZE=`echo $FS | awk -F' ' '{print $5}'|cut -d% -f1`
if [ $FS_SIZE -gt 95 ]; then
echo "NOM - $now serveur nom_serveur : partition $FS_NAME utilise ${FS_SIZE}% !" > /var/log/espace-disque-$jour.log
echo "." >> /var/log/espace-disque-$jour.log
#cat /var/log/espace-disque-$jour.log | nail -s "alerte--serveur" -r ronan@DOMAIN $destinataire
# mail -s "alerte-nom_serveur" $destinataire < /var/log/espace-disque-$jour.log
#exemple de commande : nail -s "$sujet" -S smtp=$serveur -r "$expediteur" -a "$piecejointe" $destinataire < /tmp/$now.txt
nail -s "$sujet" -S smtp=$serveur -r "$expediteur" $destinataire < /var/log/espace-disque-$jour.log
fi
done
Surveillance Charge machine
Il s’agit ici de surveiller la charge machine, et d’envoyer une alerte si elle persiste trop longtemps. Il est à planifier toutes les heures. (mise à jour 28nov : swap dispo)
#!/bin/bash
# surveillance charge machine
# uptime |cut -d' ' -f 12 |cut -d',' -f 1
seuil=2
now=$(date +%a-%d-%b--%HH%M)
jour=$(date +%d)
destinataire="adresse@fai.fr"
swapmini=100000
charge=$(uptime |cut -d' ' -f 12 |cut -d',' -f 1 |cut -d'.' -f 1)
charge2=$(uptime |cut -d' ' -f 12 |cut -d',' -f 1)
comptage="/tmp/charge.comptage.log"
# fichier /tmp/charge.comptage.log comptablise alertes consecutives
# si trop nombreuses (nb lignes) on pourra s'en servir pour shooter certains services..
#charge=3 # debugage
# logguer l'etat pour un suivi
uptime >> /var/log/charge-machine-suivi-$jour.log
# tester
if [ $charge -gt $seuil ]; then
echo "Nom - $now serveur nom_serveur: charge $charge2 trop forte > $seuil" > /var/log/charge-machine-$jour.log
echo $now >> $comptage
nbAlertes=$(cat $comptage |wc -l)
if [ $nbAlertes -gt 1 ]; then
echo "nb alertes consecutives : $nbAlertes" >> /var/log/charge-machine-$jour.log
fi
echo "." >> /var/log/charge-machine-$jour.log
mail -s "Alerte-charge-Nom_Serveur" $destinataire < /var/log/charge-machine-$jour.log
else
if [ -e $comptage ]; then
echo "retour normale $now" >> /var/log/charge-machine-$jour.log
rm /tmp/charge.comptage.log
# envoyer mail retour normale
echo "Nom : retour normale - $now serveur nom_serveur: charge $charge2" > /tmp/mail.txt
echo "." >> /tmp/mail.txt
mail -s "retour-normale-charge-Nom_Serveur" $destinataire < /tmp/mail.txt
rm /tmp/mail.txt
fi
fi
# surveillance SwapFree
SwapTotal=$(sed -n '/SwapTotal/{s/[^0-9]*//g;p}' /proc/meminfo)
SwapDispo=$(sed -n '/SwapFree/{s/[^0-9]*//g;p}' /proc/meminfo)
#echo "SwapFree = $MEM"
if [ $SwapDispo -lt $swapmini ]; then
echo "monNom - $now serveur : swap $SwapDispo/$SwapTotal < $swapmini !" > /var/log/charge-machine-swap-$jour.log
mail -s "Alerte-Swap-serveur" $destinataire < /var/log/charge-machine-swap-$jour.log
fi
Un script de sauvegarde d’une machine du réseau
Un serveur win en 192.168.0.1 a un dossier dans lequel il génère une sauvegarde (ou tout autre fichier(s) ) que l’on souhaite archiver sur le linux. Il existe un dossier (vide) sur le linux /mnt/windows pour monter le partage réseau.
#!/bin/bash
# script copie fichier sur le reseau, archivage et log
#ronan le 31/12/10
#
dossier="/home/toto/sauveg.win/etat.system" # dossier sur linux
sourcewin="sauveg.systeme" # dossier sur windows
fichier="sauveg.system.state.bkf" # nom fichier
ipserveurwin="192.168.0.1" # ip serveur win
partagewin="C$" # nom partage sur le win
loginwin="administrateur" # nom login sur le win
passewin="12345678" # mot de passe sur le win
now=$(date +%F) #date aujourd'hui
mois=$(date +%m) #numero mois
annee=$(date +%Y) #numero annee
anneePrec=$(date +%Y) #numero annee precedente
let "anneePrec -= 1"
fichierLog="/home/toto/sauvegarde.syst.$mois-$annee.log" # fichier log
#
#supprimer fichier log de l'annee precedente
/bin/rm -f /home/toto/sauvegarde.syst.$mois-$anneePrec.log
#
# logguer debut action
echo "debut copie system state" >> $fichierLog
date >> $fichierLog
#
#renommer ancien fichier sauvegarde
mv $dossier/$fichier $dossier/$fichier.$now
#
# montage
mount -t cifs -o username=$loginwin,password=$passewin //$ipserveurwin/$partagewin /mnt/windows/
#
#copie :
# si le fichier existe sur le win :
if test -f /mnt/windows/$sourcewin/$fichier; then
cp /mnt/windows/$sourcewin/$fichier $dossier/
#echo " * OK fichier $fichier existe dans $dossier"
else
echo " *** ERREUR fichier source $fichier inaccessible dans $dossier !"
echo "---" >> $fichierLog
echo " *** ERREUR fichier source $fichier inaccessible dans $dossier !" >> $fichierLog
echo "---" >> $fichierLog
fi
#
#demontage
umount /mnt/windows
#
#droits
chown toto.users $fichierLog
chown toto.users $dossier/$fichier
#
#fin
date >> $fichierLog
echo "---" >> $fichierLog
Archiver un fichier d’un dossier et conserver un historique sur 5 jours de le semaine.
À coupler avec le script ci dessus (sauvegarde machine réseau) qui gère le fichier de log (suppression du log ancien.) On aurait pu mettre ces logs dans /var/log/ mais dans mon besoin l’utilisateur « toto » devait pouvoir les consulter directement.
#!/bin/bash
#ronan le 31/12/10
# archive le .tar des donnees
# --> avec historisation sur une semaine
fichier="sauveg.donnees.tar" #nom fichier
dossier="/home/toto/sauveg/donnees" #emplacement sauvegarde
now=$(date +%u) #numero du jour dans la semaine
mois=$(date +%m) # numero mois
annee=$(date +%Y) # annee
fichierLog="/home/toto/sauvegarde.syst.$mois-$annee.log" # fichier log
#si fichier existe :
if test -f $dossier/$fichier; then
#archiver fichier
echo "-- archivage donnees $fichier dans $fichier.$now" >> $fichierLog
/bin/mv -f $dossier/$fichier $dossier/$fichier.$now
date >> $fichierLog
else
echo " *** ERREUR fichier $fichier illisible dans $dossier !"
echo " ***" >> $fichierLog
echo " *** ERREUR fichier $fichier illisible dans $dossier !" >> $fichierLog
date >> $fichierLog
fi