Description

Voici un script bash que vous pouvez déposer sur votre serveur en mode Gandi AI ou Expert, afin d'être alerté par mail en cas de dépassement du quota d'utilisation de l'un des disques attachés au serveur.

Le script qui suit, va lister tous les disques montés sur le serveur et vérifier l'utilisation de l'espace disque sur chacun d'eux, puis enverra un mail en indiquant uniqdeploying-rails-applicationsuement les disques ayant dépassé le quota.

Mise en place

Pré-requis : Il est nécéssaire de disposer du serveur de mail PostFix pour que le mail puisse être envoyé vers l'extérieur. Sur les serveurs en mode Gandi AI, il suffit d'installer le module 'PostFix' comme indiqué sur le Wiki à l'adresse http://wiki.gandi.net/fr/hosting/gandi-ai/create-server#le-mode-d-installation-gandi-ai-avec-choix-de-vos-modules et de le configurer http://wiki.gandi.net/fr/hosting/create-server/gandi-ai/mail-server-configuration

Pour installer le script, connectez vous en SSH sur votre serveur avec l'utilisateur 'admin' et le mot de passe défini à la création du serveur.

Puis, créez le fichier du script dans un répertoire ou l'utilisateur 'admin' a les droits, ou bien créez ce répertoire. Par exemple, je placerai mon script dans '/srv/d_mondisque/scripts' (où 'd_mondisque' est le nom du disque à adapter par rapport à votre configuration).

Pour créer le répertoire et créer le fichier, tapez :

mkdir /srv/d_nomdudisque/scripts ; touch /srv/d_nomdudisque/scripts/checkdisk.sh

Puis éditez le fichier afin d'y placer le script de vérification 'vim /srv/d_nomdudisque/scripts/checkdisk.sh', collez ensuite le script suivant :

#!/bin/bash

# Ex alert_quota=90 -> Vous serez alerté si l'un des disques monté sur votre serveur atteint plus de 90% d'utilisation de l'espace
alert_quota=90

#Définir le destinataire du mail
destinataire="toto@example.net"

#Par défaut user@hostname
emetteur=`whoami`"@"`hostname`

i=0
for disk in `df | grep /dev/xvd | awk -F" " '{print $1}' | cut -d/ -f3`
do
	space_use=`df | grep $disk | awk -F" " '{print $5}' | cut -d% -f1`
	
	if [ "$space_use" -gt "$alert_quota" ]
	then	
		i=$((i + 1))
		over_quota["$i"]="$disk"
	fi
done

if [ ${#over_quota[*]} -gt 0 ]
then
        subject="Dépassement de quota disque sur le serveur `hostname`"
	message="Attention ! Le(s) disque(s) suivants ont atteint un quota supérieur à $alert_quota% d'utilisation\n\n"
	message+="Voici le détails des disques concernés :\n"
	for disk in ${over_quota[*]}
	do
		info_disk=(`df -h | grep $disk | awk -F" " '{print $6, $2, $3, $4, $5}'`)
		message+="\t|- Point de montage : ${info_disk[O]} - Espace total : ${info_disk[1]} - Espace utilisé : ${info_disk[2]} - Espace Disponible : ${info_disk[3]} - % Espace utilisé : ${info_disk[4]}"
	done
	message=`echo -e "$message"`

#envoi du mail
function fappend {
	echo "$2">>$1;
}

temp=".tempmail_"$RANDOM;
rm -rf $temp;
  fappend $temp "From: $emetteur";
  fappend $temp "To: $destinataire";
  fappend $temp "Subject: $subject";
  fappend $temp "Content-Type: text/plain; charset=UTF-8;  format=flowed";
  fappend $temp "Content-Transfer-Encoding: 8bit";
  fappend $temp "";
  fappend $temp "$message";
  fappend $temp "";
  fappend $temp "";
  cat $temp| /usr/sbin/sendmail -t;
  rm $temp;
fi

Enfin, appliquez les droits d’exécution sur le fichier :

chmod +x checkdisk.sh

Les deux seules variables intéressantes pour la configuration sont 'alert_quota' et 'destinataire' qui servent à définir le niveau d'alerte en pourcentage et le destinataire du mail. Je vous conseille de modifier la variable 'alert_quota' et d'y mettre une valeur nulle afin de vérifier le bon fonctionnement du script.

Vous pourrez tester manuellement le fonctionnement du script en faisant './checkdisk.sh'.

Si vous recevez un mail, alors cela fonctionne. Modifiez alors la variable en fonction de vos souhaits.

N'oubliez pas de définir le destinataire du mail et le quota d'utilisation avant alerte situé au début du script

Vérification automatique avec les crontab

Afin d'être alerté automatiquement en cas de dépassement du quota d'alerte sur l'un des disques, nous allons mettre en place une tâche cron qui exécutera le script à un intervalle régulier.

Vous pourrez définir la fréquence d’exécution du script en fonction de vos besoins, pour ajouter un crontab, utilisez la commande 'crontab -e'.

Puis indiquez la fréquence, en fonction de vos préférences :

# Toutes les heures
@hourly /bin/bash /srv/d_nomdudisque/scripts/checkdisk.sh

# Tous les jours
@daily /bin/bash /srv/d_nomdudisque/scripts/checkdisk.sh

#Toutes les semaines
@weekly /bin/bash /srv/d_nomdudisque/scripts/checkdisk.sh

Pour en savoir plus sur l'utilisation des tâches cron :

http://fr.wikipedia.org/wiki/Crontab#Exemples


Une fois la tâche cron configurée, vous recevrez un mail d'alerte quand le disque aura atteint un certain quota. La valeur 'alert_quota' est à définir en fonction de la taille de vos disques.

Dernière modification: le 03/06/2013 à 16:23 par Alexandre J. (Gandi)