Outils & Référence

📊 Scripts Monitoring — Alertes — Scripts prêts à l'emploi

📜 Scripts Utiles

10 scripts de monitoring et d'alertes : CPU, RAM, disque, services, uptime.

📜 4 scripts 🟢 2 débutant 🔵 1 confirmé 🔴 1 expert
Monitoring CPU/RAM/Disque avec alertes
Débutant cpuramdiskalerteemail

Surveillance en temps réel des ressources système avec envoi d'email si seuil dépassé.

script
#!/bin/bash
# ─── Variables à modifier ───────────────────────────
SEUIL_CPU=85          # % CPU
SEUIL_RAM=90          # % RAM
SEUIL_DISK=85         # % disque
EMAIL="admin@monsite.fr"
HOSTNAME=$(hostname)
LOG="/var/log/ressources.log"
# ────────────────────────────────────────────────────

ALERTES=""

# CPU (moyenne sur 1 seconde)
CPU=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1 | cut -d',' -f1)
CPU_INT=${CPU%.*}
if [ "${CPU_INT:-0}" -gt "$SEUIL_CPU" ]; then
    ALERTES+="⚠️ CPU : ${CPU}% (seuil: ${SEUIL_CPU}%)
"
fi

# RAM
RAM_TOTAL=$(free -m | awk 'NR==2{print $2}')
RAM_USED=$(free -m  | awk 'NR==2{print $3}')
RAM_PCT=$((RAM_USED * 100 / RAM_TOTAL))
if [ "$RAM_PCT" -gt "$SEUIL_RAM" ]; then
    ALERTES+="⚠️ RAM : ${RAM_PCT}% (${RAM_USED}MB/${RAM_TOTAL}MB)
"
fi

# Disques
while IFS= read -r line; do
    usage=$(echo "$line" | awk '{print $5}' | tr -d '%')
    mount=$(echo "$line" | awk '{print $6}')
    if [ "${usage:-0}" -gt "$SEUIL_DISK" ]; then
        ALERTES+="⚠️ Disque $mount : ${usage}%
"
    fi
done < <(df -h | grep -vE '^Filesystem|tmpfs|udev')

# Résumé
DATE=$(date '+%Y-%m-%d %H:%M')
echo "$DATE CPU:${CPU_INT}% RAM:${RAM_PCT}% " | tee -a "$LOG"

if [ -n "$ALERTES" ]; then
    echo -e "Alertes ressources sur $HOSTNAME :

$ALERTES"         | mail -s "⚠️ Alertes ressources $HOSTNAME" "$EMAIL"
    echo "Alerte envoyée"
fi
Check HTTP/HTTPS avec alerte
Débutant httpuptimecurlmonitoring

Vérifie qu'une liste de sites web répond correctement et alerte si l'un est down.

script
#!/bin/bash
# ─── Variables à modifier ───────────────────────────
SITES=(
    "https://monsite.fr"
    "https://app.monsite.fr/health"
    "https://api.monsite.fr/status"
)
TIMEOUT=10
EMAIL="admin@monsite.fr"
LOG="/var/log/uptime_check.log"
# ────────────────────────────────────────────────────

ALERTES=""
DATE=$(date '+%Y-%m-%d %H:%M:%S')

for url in "${SITES[@]}"; do
    # Mesure du code HTTP et temps de réponse
    RESULT=$(curl -o /dev/null -s -w "%{http_code}|%{time_total}"         --max-time $TIMEOUT         --connect-timeout 5         -L "$url" 2>/dev/null)

    CODE="${RESULT%|*}"
    TIME="${RESULT#*|}"
    TIME_MS=$(echo "$TIME * 1000" | bc 2>/dev/null | cut -d. -f1)

    if [ "$CODE" -ge 200 ] && [ "$CODE" -lt 400 ] 2>/dev/null; then
        STATUS="✅ OK"
        echo "$DATE | $STATUS | $url | HTTP $CODE | ${TIME_MS}ms" >> "$LOG"
        echo "$STATUS $url (HTTP $CODE — ${TIME_MS}ms)"
    else
        STATUS="❌ DOWN"
        MSG="$url : HTTP ${CODE:-TIMEOUT}"
        ALERTES+="$MSG
"
        echo "$DATE | $STATUS | $url | HTTP $CODE" >> "$LOG"
        echo "❌ DOWN : $url (code: ${CODE:-TIMEOUT})"
    fi
done

if [ -n "$ALERTES" ]; then
    echo -e "Sites en erreur :

$ALERTES
Vérifier immédiatement."         | mail -s "❌ Site(s) DOWN — $(hostname)" "$EMAIL"
fi
# Cron : */5 * * * * /opt/scripts/check_http.sh
Rapport quotidien système par email
Confirmé rapportemailcronmonitoring

Envoie chaque matin un rapport complet de l'état du système par email.

script
#!/bin/bash
# ─── Variables à modifier ───────────────────────────
EMAIL="admin@monsite.fr"
HOSTNAME=$(hostname)
# ────────────────────────────────────────────────────

RAPPORT=$(cat << 'EOF_RAPPORT'
Rapport quotidien — HOSTNAME — DATE
═════════════════════════════════════

── UPTIME ─────────────────────────────
UPTIME_DATA

── RESSOURCES ─────────────────────────
CPU_DATA
RAM_DATA
DISK_DATA

── SERVICES ───────────────────────────
SERVICES_DATA

── CONNEXIONS SSH (24h) ───────────────
SSH_DATA

── ERREURS RÉCENTES (syslog) ──────────
ERRORS_DATA
EOF_RAPPORT
)

UPTIME_DATA=$(uptime -p)
CPU_DATA="Charge : $(cat /proc/loadavg | awk '{print $1,$2,$3}')"
RAM_DATA="RAM : $(free -h | awk 'NR==2{print "Total:"$2" Utilisé:"$3" Libre:"$4}')"
DISK_DATA=$(df -h | grep -vE "tmpfs|udev" | tail -n +2)
SERVICES_DATA=$(systemctl list-units --type=service --state=failed --no-pager --no-legend 2>/dev/null | head -5 || echo "Aucun service en erreur")
SSH_DATA=$(grep "Accepted" /var/log/auth.log 2>/dev/null | grep "$(date '+%b %e')" | tail -5 || echo "Aucune connexion")
ERRORS_DATA=$(grep -i "error\|critical\|failed" /var/log/syslog 2>/dev/null | grep "$(date '+%b %e')" | tail -10 || echo "Aucune erreur critique")

RAPPORT=$(echo "$RAPPORT"     | sed "s/HOSTNAME/$HOSTNAME/g"     | sed "s/DATE/$(date '+%d\/%m\/%Y')/g"     | sed "s/UPTIME_DATA/$UPTIME_DATA/g"     | sed "s/CPU_DATA/$CPU_DATA/g"     | sed "s/RAM_DATA/$RAM_DATA/g")

echo "$RAPPORT" | mail -s "📊 Rapport quotidien $HOSTNAME — $(date '+%d/%m/%Y')" "$EMAIL"
echo "Rapport envoyé à $EMAIL"
# Cron : 0 7 * * * /opt/scripts/rapport_quotidien.sh
Monitoring avec fichier de statut JSON
Expert JSONAPImonitoringstatut

Génère un fichier status.json lisible par un dashboard web pour afficher l'état des services.

script
#!/bin/bash
# ─── Variables à modifier ───────────────────────────
SERVICES=("nginx" "mysql" "redis" "php8.2-fpm")
OUTPUT="/var/www/html/status.json"
URLS_A_CHECKER=("http://localhost" "http://localhost:8080")
# ────────────────────────────────────────────────────

# Collecte des métriques
CPU=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d',' -f1)
RAM_PCT=$(free | awk 'NR==2{printf "%.1f", $3*100/$2}')
DISK_PCT=$(df / | tail -1 | awk '{print $5}' | tr -d '%')
UPTIME=$(uptime -p | sed 's/up //')
TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ")

# Services
SERVICES_JSON=""
for svc in "${SERVICES[@]}"; do
    if systemctl is-active --quiet "$svc"; then
        STATUS="running"
    else
        STATUS="stopped"
    fi
    SERVICES_JSON+="{"name":"$svc","status":"$STATUS"},"
done
SERVICES_JSON="[${SERVICES_JSON%,}]"

# URLs
URLS_JSON=""
for url in "${URLS_A_CHECKER[@]}"; do
    CODE=$(curl -o /dev/null -s -w "%{http_code}" --max-time 5 "$url")
    if [ "$CODE" -ge 200 ] && [ "$CODE" -lt 400 ] 2>/dev/null; then
        STATUS="up"
    else
        STATUS="down"
    fi
    URLS_JSON+="{"url":"$url","status":"$STATUS","code":$CODE},"
done
URLS_JSON="[${URLS_JSON%,}]"

cat > "$OUTPUT" << JSON
{
  "timestamp": "$TIMESTAMP",
  "hostname": "$(hostname)",
  "uptime": "$UPTIME",
  "cpu_percent": $CPU,
  "ram_percent": $RAM_PCT,
  "disk_percent": $DISK_PCT,
  "services": $SERVICES_JSON,
  "urls": $URLS_JSON
}
JSON
echo "✅ status.json mis à jour — $(wc -c < $OUTPUT) octets"
Ajouter Les Fibrés à mes sources préférées
Retrouvez plus souvent nos guides dans vos résultats Google