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