Recherche de site Web

Un script Shell pour surveiller l'utilisation du disque sous Linux (seuil de 80%)


Si vous avez déjà fait fonctionner un système Linux en production ou même simplement maintenu un serveur personnel, vous saurez que manquer d'espace disque est l'un des problèmes les plus frustrants. Soudainement, vos applications cessent de fonctionner, les bases de données n'écrivent plus de nouvelles données, et les fichiers journaux continuent de se remplir comme un train incontrôlable.

La bonne nouvelle est que Linux rend étonnamment facile de surveiller l'utilisation du disque et de détecter les problèmes avant qu'ils ne se produisent. Tout ce dont vous avez besoin est un petit script shell, un peu de logique, et peut-être une alerte par email (ou un message dans votre canal Slack, si vous êtes chic).

Dans cet article, nous allons créer un script simple qui vérifie l'utilisation de votre disque et envoie une alerte si elle dépasse 80 %.

Étape 1 : Vérifier l'utilisation du disque sur Linux

Avant d'écrire un script, vous devez connaître l'utilisation actuelle de l'espace disque sur votre système en utilisant la commande df.

df -h

Le flag -h signifie « lisible par l'homme », donc au lieu d'afficher des blocs de données brutes, il formate la sortie en Go et Mo, ce qui est beaucoup plus facile à comprendre.

Dans l'exemple ci-dessus, la partition racine / (/dev/sda1) est à 45%, ce qui est parfaitement sain, mais une fois qu'elle commence à dépasser 80%, c'est notre signal d'alerte ; cela signifie que l'espace commence à manquer.

Étape 2 : Créez un script pour surveiller l'utilisation du disque

Maintenant que vous savez comment vérifier manuellement l'utilisation du disque, transformons cela en quelque chose d'automatique à l'aide d'un script shell, qui est idéal pour ce genre de choses car il nous permet de prendre des commandes que nous exécutons normalement et de les lier avec un peu de logique.

Voici un script très simple pour surveiller votre partition racine (/) :

#!/bin/bash

Set threshold (percentage)
THRESHOLD=80

Extract the usage percentage for root filesystem
USAGE=$(df -h / | awk 'NR==2 {print $5}' | sed 's/%//')

Compare usage against threshold
if [ "$USAGE" -ge "$THRESHOLD" ]; then
    echo "Warning: Disk usage is at ${USAGE}% on $(hostname)" | mail -s "Disk Alert: $(hostname)" [email 
fi

Décomposons ce qui se passe ici :

  • THRESHOLD=80 → C'est la limite qui nous intéresse, tout ce qui est plus élevé est trop risqué.
  • df -h / → Cela vérifie uniquement le système de fichiers racine.
  • awk 'NR==2 {print $5}' → À partir de la sortie de df, ceci récupère la colonne « Use% ».
  • sed 's/%//' → Supprime le signe % afin que nous puissions le traiter comme un nombre.
  • Le bloc if → Si l'utilisation du disque dépasse le seuil, cela déclenche une alerte.

Pour le moment, le script envoie un e-mail en utilisant la commande mail. Si vous n'avez pas configuré le courrier électronique sur votre système, ne vous inquiétez pas, je vais vous montrer comment le configurer.

Étape 3 : Surveiller l'utilisation du disque de toutes les partitions

La plupart des serveurs ne dépendent pas d'une seule partition ; au contraire, ils sont généralement divisés en plusieurs, comme /, /home, /var ou même /data. Si vous ne surveillez que la partition racine (/), vous risquez de manquer des problèmes critiques ailleurs, par exemple, si /var se remplit de journaux, vos applications pourraient échouer même si / dispose encore de beaucoup d'espace.

Voici une version légèrement améliorée qui vérifie tous les systèmes de fichiers montés :

#!/bin/bash

THRESHOLD=80

Loop through each filesystem listed by df
df -h | grep '^/dev/' | while read line; do
    USAGE=$(echo $line | awk '{print $5}' | sed 's/%//')
    PART=$(echo $line | awk '{print $6}')

    if [ "$USAGE" -ge "$THRESHOLD" ]; then
        echo "Warning: Partition $PART is at ${USAGE}% on $(hostname)" | mail -s "Disk Alert: $(hostname)" [email 
    fi
done

Maintenant, au lieu de vérifier uniquement /, il parcourt chaque système de fichiers sous /dev/ et si une partition dépasse 80%, vous recevrez un e-mail d'avertissement.

Étape 4 : Automatiser le script avec Cron

Cron est un service de planification simple sur Linux qui peut exécuter des commandes à des heures ou intervalles fixes. Vous pouvez l'utiliser pour que votre script de surveillance du disque s'exécute automatiquement, par exemple, toutes les heures.

Pour le configurer, ouvrez votre crontab avec :

crontab -e

Ajoutez cette ligne en bas :

0 * * * * /path/to/disk_check.sh

Cela signifie :

  • 0 → s'exécuter au début de l'heure.
  • * * * * → toutes les heures, tous les jours.
  • /path/to/disk_check.sh → remplacez ceci par l'emplacement réel de votre script.

Enregistrez et quittez, et cron s'occupera du reste. À partir de maintenant, votre script vérifiera discrètement l'utilisation du disque en arrière-plan et vous alertera si les choses semblent mauvaises.

Étape 5 : Test du script

Avant de vous fier à ce script, il est judicieux de le tester. Après tout, vous ne voulez pas attendre que votre disque soit réellement rempli à 80 % pour découvrir si votre système d'alerte fonctionne.

Le moyen le plus facile de tester consiste à abaisser temporairement le seuil :

THRESHOLD=1

De cette manière, le script déclenchera presque certainement une alerte immédiatement puisque la plupart des partitions sont remplies à au moins 1%. Une fois que vous avez confirmé que les e-mails ou les journaux fonctionnent, remettez-le à 80.

Si vous n'êtes pas prêt à configurer l'e-mail, vous pouvez remplacer la commande mail par quelque chose de plus simple, comme :

echo "Warning: Partition $PART is at ${USAGE}% on $(hostname)"

Cela affichera simplement l'alerte dans votre terminal, ce qui est utile pour un débogage rapide.

Étape 6 : Configurer les notifications par e-mail

Notre script utilise la commande mail pour envoyer des alertes, mais cet outil n’est pas toujours disponible par défaut. Vous devrez l’installer d’abord :

sudo apt install mailutils  [On Debian]
sudo yum install mailx      [On RHEL]

Une fois installé, vous devez vous assurer que votre serveur peut réellement envoyer des e-mails, ce qui peut nécessiter une configuration supplémentaire, comme configurer Postfix, Gmail SMTP, ou un service tiers tel que SendGrid.

Si vous ne voulez pas traiter vos e-mails pour le moment, vous pouvez toujours rendre le script utile en enregistrant les alertes dans un fichier :

echo "Disk usage alert: $PART at $USAGE%" >> /var/log/disk_alert.log

De cette façon, vous pouvez vérifier le journal plus tard ou utiliser la commande suivante pour surveiller les alertes en temps réel.

tail -f /var/log/disk_alert.log

Étape 7 : Quand aller au-delà des scripts shell

Les scripts Shell sont excellents pour l'apprentissage et suffisent souvent pour un seul serveur ou un petit projet, mais si vous gérez plusieurs serveurs ou avez besoin d'une surveillance plus détaillée, vous voudrez probablement passer à des outils de surveillance dédiés.

  • Nagios → L'un des systèmes de surveillance les plus anciens et les plus fiables.
  • Zabbix → Bien si vous voulez des tableaux de bord, des graphiques et un endroit central pour surveiller de nombreux serveurs.
  • Prometheus + Grafana → Une configuration moderne où Prometheus collecte les métriques, et Grafana crée de beaux tableaux de bord pour les visualiser.
En conclusion

Avec seulement quelques lignes de script shell, vous avez créé un système léger de surveillance de disque qui surveille vos partitions et vous avertit avant que les choses ne deviennent critiques.

En définissant un seuil, en ajoutant un peu de logique et en le programmant avec cron, vous avez automatisé une tâche qui nécessiterait autrement des vérifications manuelles constantes, ce qui signifie moins de surprises, moins de pannes et plus de tranquillité d'esprit.

Si vous voulez pousser votre automatisation Linux plus loin, consultez notre guide associé : Comment automatiser les contrôles de santé quotidiens de Linux avec un script Bash + Cron.