29/07/2023Si vous souhaitez être alerté lors de problème d'espace disque, de RAM et de charge processeur, voici un script que j'ai réalisé pour proposer une solution rapide à mettre en place.
L'alerte prend la forme d'un email contenant le détail de ce qu'il se passe sur le serveur, aux niveaux des processus, de la mémoire et de l'espace disque. Il est envoyé lorsqu'un des seuils critiques est atteint.
Voici la procédure de mise en place :
- Créez un fichier sur votre serveur (nommé monitorer_serveur.sh par exemple), avec un utilitaire comme nano
- Copiez-collez le code ci-dessous :
#!/bin/bash
# Constantes
DESTI_EMAIL="email@domaine.com"
LOG_FICHIER="/var/log/system_monitor.log"
LOG_NB_ENTREES_MAXI=10
EMAIL_SUJET="[$(hostname)] Rapport de surveillance système"
SEUIL_CPU=80
SEUIL_MEMOIRE=90
SEUIL_ESPACE_DISQUE=90
# Variables pour les seuils dépassés
alerte_cpu=false
alerte_memoire=false
alerte_espace_disque=false
# Variables pour stocker les informations des seuils dépassés
message_alerte=""
# Envoie un e-mail
envoieEmail() {
local sujet="$1"
local message="$2"
local logs=$(tail -n "$LOG_NB_ENTREES_MAXI" "$LOG_FICHIER")
local top_processes="$(ps -eLo user,%cpu,cmd | awk 'NR == 1; NR > 1 {print | "sort -k2,2nr | head -n 10"}')"
local info_load_average="$(uptime)"
local info_memoire="$(free -h)"
local info_disque="$(df -h)"
local date=$(date '+%Y-%m-%d %H:%M:%S')
echo -e "$message\nDate de l'alerte : $date\n\nDernières mesures :\n$logs\n\nProcessus qui consomment le plus :\n$top_processes\n\nLoad average :\n$info_load_average\n\nInfos mémoire :\n$info_memoire\n\nInfos espace disque :\n$info_disque" | mail -s "$sujet" "$DESTI_EMAIL"
}
# Affiche le texte coloré
coloreTexte() {
local code_couleur=$1
local texte=$2
echo -e "${code_couleur}${texte}\e[0m"
}
# Surveillance de la charge du processeur
# -- Récupérer le nombre de cœurs (threads) du système
nproc=$(nproc)
# -- Récupérer l'utilisation actuelle du CPU
utilisation_cpu=$(awk '{print $1}' /proc/loadavg)
# -- Convertir l'utilisation du CPU en pourcentage entre 0 et 100
utilisation_cpu=$(awk "BEGIN { pourcentage = $utilisation_cpu * 100; print pourcentage }")
date=$(date '+%Y-%m-%d %H:%M:%S')
# Surveillance de la mémoire RAM
utilisation_memoire=$(free | awk '/Mem/{printf("%.2f"), $3/$2 * 100}')
# Surveillance de l'utilisation de l'espace disque
utilisation_disque=$(df -h | awk '/\/$/{printf("%s"), $5}' | cut -d '%' -f1)
# Enregistrement des mesures dans le fichier de logs
log_message="$date - Processeur : $utilisation_cpu%, Mémoire : $utilisation_memoire%, Espace disque : $utilisation_disque%"
echo "$log_message" >> "$LOG_FICHIER"
# Vérification de la charge du processeur
if (( "$utilisation_cpu" >= "$SEUIL_CPU" )); then
alerte_cpu=true
message_alerte+="La charge processeur actuelle est élevée : $utilisation_cpu %\n"
fi
# Vérification de l'utilisation de la mémoire
if (( $(echo "$utilisation_memoire >= $SEUIL_MEMOIRE" | bc -l) )); then
alerte_memoire=true
message_alerte+="L'utilisation de la mémoire RAM est élevée : $utilisation_memoire %\n"
fi
# Vérification de l'utilisation de l'espace disque
if ((utilisation_disque >= SEUIL_ESPACE_DISQUE)); then
alerte_espace_disque=true
message_alerte+="L'utilisation de l'espace disque est élevée : $utilisation_disque %\n"
fi
# Vérifier s'il y a des seuils dépassés et envoyer un e-mail si nécessaire
if $alerte_cpu || $alerte_memoire || $alerte_espace_disque; then
envoieEmail "[$(hostname)] Alertes système" "$message_alerte"
fi
# Affichage du statut global dans la console
message="Charge processeur : $utilisation_cpu%, Mémoire : $utilisation_memoire%, Espace disque : $utilisation_disque% ==> "
message+=$([ "$alerte_cpu" = true || [ "$alerte_memoire" = true || [ "$alerte_espace_disque" = true && coloreTexte "\e[31m" "Alerte envoyée" || coloreTexte "\e[32m" "OK")
echo "$message"
- Modifiez l'adresse email de destination (variable DESTI_EMAIL) et éventuellement les seuils d'alerte
- Enregistrez le fichier
- Affichez le gestionnaire CRON :
- Ajoutez la ligne suivante, enregistrez et quittez
*/5 * * * * bash /opt/scripts/monitorer_serveur.sh
Le script sera ainsi lancé toutes les 5 minutes et enverra un message par email en cas de problème.
Dernière modification le 05/08/2023 - Quillevere.net