Lab 2.3 - Monitoring Système Avancé
Objectifs
À la fin de ce lab, vous serez capable de:
- Monitorer les performances système
- Analyser les ressources (CPU, RAM, disque, réseau)
- Utiliser les outils de monitoring avancés
- Créer des scripts de monitoring
- Configurer des alertes
Prérequis
- Système Linux fonctionnel
- Accès root ou sudo
- Outils: htop, iotop, nethogs (optionnels mais recommandés)
Exercice 1: Installation des Outils
Étape 1: Outils de Base
# Mettre à jour
sudo apt update
# Installer outils monitoring
sudo apt install -y htop iotop nethogs sysstat
# Vérifier installation
which htop iotop nethogs sar
Exercice 2: Monitoring CPU
Étape 1: Informations CPU
# Informations CPU
lscpu
# Détails CPU
cat /proc/cpuinfo
# Nombre de CPUs
nproc
# Load average
uptime
cat /proc/loadavg
Étape 2: Utilisation CPU
# Top processus CPU
top -bn1 | head -20
# Avec htop
htop
# Statistiques CPU
mpstat 1 5
# Par CPU
mpstat -P ALL 1 5
Étape 3: Script CPU
# Script monitoring CPU
cat > cpu-monitor.sh << 'EOF'
#!/bin/bash
echo "=== CPU Info ==="
lscpu | grep -E 'Model name|CPU\(s\)|Thread|Core'
echo
echo "=== Load Average ==="
uptime
echo
echo "=== Top 5 CPU ==="
ps aux --sort=-%cpu | head -6
EOF
chmod +x cpu-monitor.sh
./cpu-monitor.sh
Exercice 3: Monitoring Mémoire
Étape 1: Vue d'Ensemble
# Mémoire
free -h
# Détails
vmstat -s
# Par processus
ps aux --sort=-%mem | head -10
Étape 2: Monitoring Continu
# Watch mémoire
watch -n 1 'free -h'
# Avec top processus
watch -n 1 'free -h && echo && ps aux --sort=-%mem | head -5'
Exercice 4: Monitoring Disque
Étape 1: Espace Disque
# Espace disponible
df -h
# Par répertoire
du -sh /* 2>/dev/null | sort -h
# Top 10 plus gros répertoires
du -h /home 2>/dev/null | sort -rh | head -10
Étape 2: I/O Disque
# Statistiques I/O
iostat -x 1 5
# Par processus (iotop)
sudo iotop
# Statistiques détaillées
cat /proc/diskstats
Étape 3: Script Disque
# Script monitoring disque
cat > disk-monitor.sh << 'EOF'
#!/bin/bash
echo "=== Espace Disque ==="
df -h
echo
echo "=== Top 10 Répertoires /home ==="
du -h /home 2>/dev/null | sort -rh | head -10
EOF
chmod +x disk-monitor.sh
./disk-monitor.sh
Exercice 5: Monitoring Réseau
Étape 1: Interfaces Réseau
# Interfaces
ip addr show
# ou
ifconfig
# Statistiques
ip -s link show
# Par interface
cat /proc/net/dev
Étape 2: Connexions
# Connexions actives
ss -tuln
# Écoute
ss -tulpn
# Par processus
sudo netstat -tulpn
Étape 3: Trafic Réseau
# nethogs (par processus)
sudo nethogs
# iftop (par connexion)
sudo iftop
# Statistiques
cat /proc/net/sockstat
Exercice 6: Monitoring Complet
Étape 1: Script de Monitoring
# Script complet
cat > system-monitor.sh << 'EOF'
#!/bin/bash
clear
echo "=== MONITORING SYSTÈME $(date) ==="
echo
echo "=== CPU ==="
echo "Load: $(uptime | awk -F'load average:' '{print $2}')"
echo "Top CPU:"
ps aux --sort=-%cpu | head -4 | tail -3
echo
echo "=== MÉMOIRE ==="
free -h | grep -E 'Mem|Swap'
echo "Top Mémoire:"
ps aux --sort=-%mem | head -4 | tail -3
echo
echo "=== DISQUE ==="
df -h / | tail -1
echo
echo "=== RÉSEAU ==="
ss -tun | grep ESTAB | wc -l
echo "Connexions établies"
EOF
chmod +x system-monitor.sh
./system-monitor.sh
Étape 2: Monitoring Continu
# Watch toutes les 2 secondes
watch -n 2 ./system-monitor.sh
# Ou avec while
while true; do
clear
./system-monitor.sh
sleep 2
done
Exercice 7: Alertes Automatiques
Étape 1: Script d'Alerte
# Script avec seuils
cat > system-alert.sh << 'EOF'
#!/bin/bash
THRESHOLD_CPU=80
THRESHOLD_MEM=80
THRESHOLD_DISK=80
# CPU
CPU_IDLE=$(mpstat 1 1 | tail -1 | awk '{print $NF}')
CPU_USED=$(echo "100 - $CPU_IDLE" | bc)
if (( $(echo "$CPU_USED > $THRESHOLD_CPU" | bc -l) )); then
echo "ALERTE: CPU à ${CPU_USED}%"
fi
# Mémoire
MEM_USED=$(free | grep Mem | awk '{printf "%.0f", $3/$2 * 100}')
if [ "$MEM_USED" -gt "$THRESHOLD_MEM" ]; then
echo "ALERTE: Mémoire à ${MEM_USED}%"
fi
# Disque
DISK_USED=$(df -h / | tail -1 | awk '{print $5}' | sed 's/%//')
if [ "$DISK_USED" -gt "$THRESHOLD_DISK" ]; then
echo "ALERTE: Disque à ${DISK_USED}%"
fi
EOF
chmod +x system-alert.sh
./system-alert.sh
Étape 2: Cron pour Monitoring
# Ajouter au crontab
crontab -e
# Ajouter cette ligne (toutes les 5 minutes)
# */5 * * * * /chemin/vers/system-alert.sh >> /var/log/system-alerts.log 2>&1
Exercice 8: Rapports
Étape 1: Rapport Quotidien
# Script rapport
cat > daily-report.sh << 'EOF'
#!/bin/bash
REPORT="/var/log/daily-report-$(date +%Y%m%d).txt"
{
echo "=== RAPPORT SYSTÈME $(date) ==="
echo
echo "=== CPU ==="
lscpu | grep -E 'Model name|CPU\(s\)'
uptime
echo
echo "=== MÉMOIRE ==="
free -h
echo
echo "=== DISQUE ==="
df -h
echo
echo "=== TOP PROCESSUS ==="
ps aux --sort=-%cpu | head -6
echo
ps aux --sort=-%mem | head -6
} > "$REPORT"
echo "Rapport créé: $REPORT"
EOF
chmod +x daily-report.sh
sudo ./daily-report.sh
Vérification
Checklist
Vérifiez que vous pouvez:
- Monitorer CPU, mémoire, disque, réseau
- Utiliser htop, iotop, nethogs
- Créer des scripts de monitoring
- Configurer des alertes
- Générer des rapports
Questions de Réflexion
-
Quel outil utiliser pour quel type de monitoring?
- CPU: top, htop, mpstat
- Mémoire: free, vmstat
- Disque: df, du, iotop
- Réseau: ss, netstat, nethogs
-
Pourquoi est-il important de monitorer régulièrement?
- Détecter les problèmes avant qu'ils ne deviennent critiques
- Planifier les ressources
- Optimiser les performances
Prochaines Étapes
- Module 3: Système de Fichiers
- Module 4: Gestion des Processus
- Module 11: Monitoring et Logs (avancé)
Lab créé le: Décembre 2024