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é.
#!/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.
#!/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.
#!/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.
#!/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