Utilitaires
Scripts
Divers
Jeux
Rechercher
Quillevere.net
Paradigmes informatiques

Monitorer un serveur Linux (script)

29/07/2023

Si 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 :
    crontab -e
  • 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

Commentaires

Aucune inscription n'est requise si vous souhaitez

Rechercher sur le site

fr en rss RSS info Informations