Introduction
Dans ce projet, vous allez créer un moniteur de système Linux à l'aide d'un script shell. Ce script suivra en continu l'utilisation du CPU, de la mémoire et du disque de votre système, affichant les pourcentages d'utilisation en temps réel. Si l'utilisation de l'une des ressources dépasse un seuil prédéfini, une alerte sera affichée. En terminant ce projet, vous apprendrez les compétences de base en scripting Linux tout en créant un outil pratique.

🎯 Tâches
En terminant ce projet, vous allez :
- Apprendre à créer un script shell pour surveiller les ressources système.
- Comprendre comment définir et utiliser des valeurs seuil pour l'utilisation du CPU, de la mémoire et du disque.
- Créer une fonction pour envoyer des alertes lorsque les seuils sont dépassés.
🏆 Réalisations
Après avoir terminé ce projet, vous serez en mesure de :
- Créer et exécuter un moniteur de système Linux à l'aide d'un script shell.
- Comprendre comment utiliser des commandes de ressources système telles que
top,freeetdf. - Être en mesure d'étendre le script en ajoutant de nouvelles fonctionnalités, telles que des notifications par e-mail.
Configuration du projet
Commencez par préparer un espace de travail propre pour votre script. Nous recommandons d'utiliser WebIDE pour ce projet, car il est adapté au codage et au test de scripts.
Accédez à ce répertoire et créez un fichier nommé system_monitor.sh :
cd ~/project
touch system_monitor.sh

Ouvrez le fichier dans votre éditeur de texte préféré et ajoutez les lignes suivantes :
#!/bin/bash
## Définir les valeurs seuil pour l'utilisation du CPU, de la mémoire et du disque (en pourcentage)
CPU_THRESHOLD=80
MEMORY_THRESHOLD=80
DISK_THRESHOLD=80
Voici ce que chaque partie du code fait :
#!/bin/bash: Cette ligne spécifie que le script sera interprété à l'aide du shell Bash.CPU_THRESHOLD=80: Définit le seuil d'utilisation du CPU à 80 %. Vous pourrez ajuster cette valeur plus tard.MEMORY_THRESHOLD=80etDISK_THRESHOLD=80: De même, ces lignes définissent les seuils d'utilisation de la mémoire et du disque.
Enregistrez le fichier et rendez-le exécutable :
chmod +x system_monitor.sh
Ajout d'une fonction d'alerte
Maintenant, ajoutons une fonction pour envoyer des alertes lorsque l'utilisation des ressources dépasse les seuils. Ouvrez system_monitor.sh et ajoutez le code suivant :
## Fonction pour envoyer une alerte
send_alert() {
echo "$(tput setaf 1)ALERT: $1 usage exceeded threshold! Current value: $2%$(tput sgr0)"
}
Voici une explication de cette fonction :
send_alert: La fonction prend deux arguments :$1représente le type de ressource (par exemple, CPU, Mémoire, Disque).$2représente le pourcentage d'utilisation actuel.
tput setaf 1: Change la couleur du texte en rouge pour rendre les alertes visuellement distinctes.tput sgr0: Réinitialise le formatage du texte à la normale après le message d'alerte.
Ajoutez un appel de test à la fonction pour vérifier qu'elle fonctionne :
send_alert "CPU" 85

Exécutez le script :
./system_monitor.sh
Vous devriez voir un message d'alerte rouge similaire à :
ALERT: CPU usage exceeded threshold! Current value: 85%
Avant de passer à la suite, supprimez l'appel de test à send_alert du script.
Surveillance de l'utilisation du CPU
Ajoutons la logique pour surveiller l'utilisation du CPU. Ouvrez le script et ajoutez le code suivant :
## Surveiller l'utilisation du CPU
cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2 + $4}')
cpu_usage=${cpu_usage%.*} ## Convertir en entier
echo "Current CPU usage: $cpu_usage%"
if ((cpu_usage >= CPU_THRESHOLD)); then
send_alert "CPU" "$cpu_usage"
fi
Voici ce qui se passe dans ce code :
top -bn1: Exécute la commandetopen mode batch pour une itération afin de récupérer les statistiques en temps réel de l'utilisation du CPU.grep "Cpu(s)": Filtre la sortie pour se concentrer sur la ligne d'utilisation du CPU.awk '{print $2 + $4}': Extrait et additionne les pourcentages d'utilisation du CPU par l'utilisateur et par le système.cpu_usage=${cpu_usage%.*}: Supprime la partie décimale pour simplifier les comparaisons avec le seuil.if ((cpu_usage >= CPU_THRESHOLD)): Compare l'utilisation du CPU avec le seuil et appellesend_alertsi le seuil est dépassé.
Exécutez le script pour tester la surveillance du CPU :
./system_monitor.sh
Vous devriez voir l'utilisation du CPU affichée. Si elle dépasse le seuil, vous verrez une alerte.
Surveillance de l'utilisation de la mémoire
Ensuite, ajoutez le code pour surveiller l'utilisation de la mémoire. Insérez les lignes suivantes sous la logique de surveillance du CPU :
## Surveiller l'utilisation de la mémoire
memory_usage=$(free | awk '/Mem/ {printf("%3.1f", ($3/$2) * 100)}')
echo "Current memory usage: $memory_usage%"
memory_usage=${memory_usage%.*}
if ((memory_usage >= MEMORY_THRESHOLD)); then
send_alert "Memory" "$memory_usage"
fi
Voici comment cela fonctionne :
free: Fournit les statistiques d'utilisation de la mémoire.awk '/Mem/ {printf("%3.1f", ($3/$2) * 100)}': Calcule le pourcentage de mémoire utilisée en divisant la mémoire utilisée ($3) par la mémoire totale ($2).- Le script compare
memory_usageavec le seuil et envoie une alerte si nécessaire.
Exécutez le script :
./system_monitor.sh
Vous devriez voir le pourcentage d'utilisation de la mémoire, et des alertes seront déclenchées si l'utilisation dépasse le seuil.
Surveillance de l'utilisation du disque
Maintenant, surveillons l'utilisation du disque. Ajoutez le code suivant sous la logique de surveillance de la mémoire :
## Surveiller l'utilisation du disque
disk_usage=$(df -h / | awk '/\// {print $(NF-1)}')
disk_usage=${disk_usage%?} ## Supprimer le signe %
echo "Current disk usage: $disk_usage%"
if ((disk_usage >= DISK_THRESHOLD)); then
send_alert "Disk" "$disk_usage"
fi
Explication :
df -h /: Récupère les statistiques d'utilisation du disque pour le répertoire racine.awk '/\// {print $(NF-1)}': Extrait la colonne du pourcentage d'utilisation.disk_usage=${disk_usage%?}: Supprime le symbole%pour faciliter les comparaisons.- Des alertes sont déclenchées si l'utilisation du disque dépasse le seuil.
Exécutez le script :
./system_monitor.sh
Vous devriez voir les statistiques d'utilisation du disque, et des alertes seront déclenchées si nécessaire.
Combinaison de toutes les fonctionnalités dans une boucle
Enfin, combinez la surveillance du CPU, de la mémoire et du disque dans une boucle pour une surveillance continue. Remplacez le contenu existant par ceci :
while true; do
## Monitor CPU
cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2 + $4}')
cpu_usage=${cpu_usage%.*}
if ((cpu_usage >= CPU_THRESHOLD)); then
send_alert "CPU" "$cpu_usage"
fi
## Monitor memory
memory_usage=$(free | awk '/Mem/ {printf("%3.1f", ($3/$2) * 100)}')
memory_usage=${memory_usage%.*}
if ((memory_usage >= MEMORY_THRESHOLD)); then
send_alert "Memory" "$memory_usage"
fi
## Monitor disk
disk_usage=$(df -h / | awk '/\// {print $(NF-1)}')
disk_usage=${disk_usage%?}
if ((disk_usage >= DISK_THRESHOLD)); then
send_alert "Disk" "$disk_usage"
fi
## Display current stats
clear
echo "Resource Usage:"
echo "CPU: $cpu_usage%"
echo "Memory: $memory_usage%"
echo "Disk: $disk_usage%"
sleep 2
done
Cette boucle surveille et met à jour en continu l'utilisation des ressources, efface l'écran et affiche les statistiques actuelles à intervalles réguliers.
Exécutez le script pour tester :
./system_monitor.sh
Résumé
Félicitations! Vous avez créé un moniteur de système Linux entièrement fonctionnel en utilisant Bash. Cet outil suit en temps réel l'utilisation du CPU, de la mémoire et du disque, et vous alerte si l'utilisation dépasse des seuils prédéfinis. N'hésitez pas à étendre le script en ajoutant des fonctionnalités telles que des notifications par e-mail ou en surveillant d'autres ressources.




