diff --git a/servers/linux/sys_check.sh b/servers/linux/sys_check.sh index e63c1a8..3a379ab 100644 --- a/servers/linux/sys_check.sh +++ b/servers/linux/sys_check.sh @@ -2,71 +2,61 @@ # --- CONFIGURATION --- THRESHOLD=90 -LOAD_THRESHOLD=5.0 # Alerte si la charge moyenne sur 1 min dépasse 5 +LOAD_THRESHOLD=5.0 +HOST=$(hostname) # On envoie à 'root', le système fera la redirection grâce aux aliases DEST="root" -HOST=$(hostname) - -# --- INITIALISATION DU RAPPORT --- REPORT="" ALERT=false -# 1. CHECK DISQUE (OCTETS)# On envoie à 'root', le système fera la redirection grâce aux aliases +# 1. CHECK DISQUE & INODES DISK_USAGE=$(df / | awk 'NR==2 {print $5}' | sed 's/%//') +INODE_USAGE=$(df -i / | awk 'NR==2 {print $5}' | sed 's/%//') + if [ "$DISK_USAGE" -gt "$THRESHOLD" ]; then REPORT="${REPORT}⚠️ DISQUE : $DISK_USAGE% utilisé\n" ALERT=true fi - -# 2. CHECK INODES (Nombre de fichiers) -# Crucial : un disque peut être vide en Go mais plein en inodes (trop de petits fichiers) -INODE_USAGE=$(df -i / | awk 'NR==2 {print $5}' | sed 's/%//') if [ "$INODE_USAGE" -gt "$THRESHOLD" ]; then - REPORT="${REPORT}⚠️ INODES : $INODE_USAGE% utilisé (Trop de fichiers !)\n" + REPORT="${REPORT}⚠️ INODES : $INODE_USAGE% utilisé\n" ALERT=true fi -# 3. CHECK RAM +# 2. CHECK RAM & SWAP RAM_USAGE=$(free | grep Mem | awk '{print int($3/$2 * 100)}') +SWAP_TOTAL=$(free | grep Swap | awk '{print $2}') + if [ "$RAM_USAGE" -gt "$THRESHOLD" ]; then REPORT="${REPORT}⚠️ RAM : $RAM_USAGE% utilisé\n" ALERT=true fi - -# 4. CHECK SWAP -# Si le swap est utilisé à plus de 50%, le serveur commence à ramer sévèrement -SWAP_TOTAL=$(free | grep Swap | awk '{print $2}') if [ "$SWAP_TOTAL" -gt 0 ]; then SWAP_USAGE=$(free | grep Swap | awk '{print int($3/$2 * 100)}') if [ "$SWAP_USAGE" -gt 50 ]; then - REPORT="${REPORT}⚠️ SWAP : $SWAP_USAGE% utilisé (Saturation RAM imminente)\n" + REPORT="${REPORT}⚠️ SWAP : $SWAP_USAGE% utilisé\n" ALERT=true fi fi -# 5. CHECK CHARGE CPU (Load Average) -CPU_LOAD=$(uptime | awk -F'load average:' '{ print $2 }' | cut -d',' -f1 | xargs) +# 3. CHECK CHARGE CPU +CPU_LOAD=$(uptime | awk -F'load average:' '{ print $2 }' | cut -d',' -f1 | tr -d ' ' | tr ',' '.') if (( $(echo "$CPU_LOAD > $LOAD_THRESHOLD" | bc -l) )); then - REPORT="${REPORT}🔥 CPU LOAD : $CPU_LOAD (Serveur surchargé)\n" + REPORT="${REPORT}🔥 CPU LOAD : $CPU_LOAD (Surcharge)\n" ALERT=true fi -# 6. CHECK SERVICES CRITIQUES (Exemple : Fail2Ban et Docker) -SERVICES=("fail2ban" "ssh" "docker") -for SVC in "${SERVICES[@]}"; do +# 4. CHECK SERVICES (SSH et Fail2Ban sont vitaux) +for SVC in "ssh" "fail2ban"; do if ! systemctl is-active --quiet "$SVC"; then REPORT="${REPORT}❌ SERVICE : $SVC est ARRÊTÉ\n" ALERT=true fi done -# --- ENVOI DE L'ALERTE --- +# --- ENVOI VIA ALIAS ROOT --- if [ "$ALERT" = true ]; then - # On ajoute un récapitulatif rapide à la fin - FULL_BODY="Détails de l'alerte pour $HOST :\n\n$REPORT\n---\nDate: $(date)" - - # Grâce à ton wrapper msmtp, le sujet sera préfixé automatiquement par [$HOSTNAME] - echo -e "$FULL_BODY" | mail -s "ALERTE RESSOURCES" "$DEST_EMAIL" + # Le sujet sera automatiquement préfixé par le wrapper [$HOSTNAME] + echo -e "Détails de l'alerte :\n\n$REPORT\n---\nDate: $(date)" | mail -s "ALERTE RESSOURCES" "$DEST" fi \ No newline at end of file