Créer un moniteur de système Linux avec Bash

LinuxBeginner
Pratiquer maintenant

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.

Linux System Monitor

🎯 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, free et df.
  • Ê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
Création du script de surveillance du système

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=80 et DISK_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 :
    • $1 représente le type de ressource (par exemple, CPU, Mémoire, Disque).
    • $2 repré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
Extrait de code de la fonction d'alerte

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 :

  1. top -bn1 : Exécute la commande top en mode batch pour une itération afin de récupérer les statistiques en temps réel de l'utilisation du CPU.
  2. grep "Cpu(s)" : Filtre la sortie pour se concentrer sur la ligne d'utilisation du CPU.
  3. awk '{print $2 + $4}' : Extrait et additionne les pourcentages d'utilisation du CPU par l'utilisateur et par le système.
  4. cpu_usage=${cpu_usage%.*} : Supprime la partie décimale pour simplifier les comparaisons avec le seuil.
  5. if ((cpu_usage >= CPU_THRESHOLD)) : Compare l'utilisation du CPU avec le seuil et appelle send_alert si 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 :

  1. free : Fournit les statistiques d'utilisation de la mémoire.
  2. 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).
  3. Le script compare memory_usage avec 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 :

  1. df -h / : Récupère les statistiques d'utilisation du disque pour le répertoire racine.
  2. awk '/\// {print $(NF-1)}' : Extrait la colonne du pourcentage d'utilisation.
  3. disk_usage=${disk_usage%?} : Supprime le symbole % pour faciliter les comparaisons.
  4. 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.

Moniteur de système Linux