Skip to content

Playbook Réponse Incident

Guide opérationnel : "Quand tout est rouge, que faire ?"

Ce playbook structure la réponse aux incidents en 4 phases, avec des liens directs vers les outils ShellBook.


Vue d'Ensemble

graph TD
    A[🚨 ALERTE] --> B{Système<br/>identifié ?}
    B -->|Non| C[Phase 1:<br/>Discovery]
    B -->|Oui| D{Type<br/>d'incident ?}

    C --> D

    D -->|Ressources| E[Phase 2a:<br/>Nettoyage]
    D -->|Application| F[Phase 2b:<br/>Debug App]
    D -->|Performance| G[Phase 3:<br/>Analyse]

    E --> H[Phase 4:<br/>Post-Mortem]
    F --> H
    G --> H

    style A fill:#f44336,stroke:#c92a2a,color:#fff
    style C fill:#2196F3,stroke:#1971c2,color:#fff
    style E fill:#4CAF50,stroke:#2f9e44,color:#fff
    style F fill:#4CAF50,stroke:#2f9e44,color:#fff
    style G fill:#FF9800800800,stroke:#fab005,color:#000
    style H fill:#da77f2,stroke:#9c36b5,color:#fff

Phase 1 : Identification (Discovery)

Première Étape Obligatoire

Ne jamais agir sans comprendre. Un diagnostic initial évite d'aggraver la situation.

Objectif

Obtenir une vue complète et rapide de l'état du système avant toute intervention.

Actions

# Télécharger et exécuter le script de découverte
curl -sSL https://raw.githubusercontent.com/VBlackJack/ShellBook/main/scripts/bash/server-discovery.sh -o /tmp/discovery.sh
chmod +x /tmp/discovery.sh
sudo /tmp/discovery.sh -o /tmp/audit_$(hostname)_$(date +%Y%m%d).md

Script recommandé : server-discovery.sh

Le rapport généré contient :

  • Rôle détecté du serveur (Web, DB, K8s, etc.)
  • État des ressources (CPU, RAM, Disque)
  • Services actifs et ports ouverts
  • Baseline de sécurité
# Exécuter l'audit complet
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
.\Invoke-ServerAudit.ps1 -OutputPath "C:\Audit\rapport_$(hostname)_$(Get-Date -Format 'yyyyMMdd').md"

Script recommandé : Invoke-ServerAudit.ps1

Le rapport généré contient :

  • Rôles Windows détectés (DC, IIS, SQL, Hyper-V)
  • État Defender et Firewall
  • Ports ouverts avec processus associés
  • Membres du groupe Administrators

Arbre de Décision Post-Discovery

graph TD
    A[Rapport Discovery] --> B{Disque > 90% ?}
    B -->|Oui| C[→ Phase 2a: Nettoyage]
    B -->|Non| D{CPU/RAM > 90% ?}

    D -->|Oui| E{Conteneurs ?}
    E -->|Oui| F[→ Phase 2b: Debug Containers]
    E -->|Non| G[→ Phase 3: Analyse Perf]

    D -->|Non| H{Services KO ?}
    H -->|Oui| I[→ Phase 2b: Debug Services]
    H -->|Non| J[→ Phase 3: Analyse Logs]

    style C fill:#4CAF50
    style F fill:#4CAF50
    style G fill:#FF9800800800
    style I fill:#4CAF50
    style J fill:#FF9800800800

Phase 2 : Quick Fixes

2a. Nettoyage Système

Attention

Ces scripts libèrent de l'espace. Exécuter en dry-run d'abord si disponible.

Nettoyage Linux

Problème Script Commande
Disque plein cleanup-system.sh sudo ./cleanup-system.sh
Logs volumineux logs-extractor.sh ./logs-extractor.sh --since "1 hour ago"
Fichiers temporaires Commande directe find /tmp -type f -mtime +7 -delete
# Nettoyage système complet (safe)
sudo ./cleanup-system.sh

# Identifier les fichiers volumineux
du -sh /* 2>/dev/null | sort -rh | head -20

Script recommandé : cleanup-system.sh

Nettoyage Docker / Conteneurs

Problème Script Commande
Images orphelines docker_cleaner_pro.py python3 docker_cleaner_pro.py --dry-run
Volumes inutilisés docker_cleaner_pro.py python3 docker_cleaner_pro.py --include-volumes
Logs conteneurs Commande directe truncate -s 0 /var/lib/docker/containers/*/*-json.log
# Dry-run d'abord (voir ce qui sera supprimé)
python3 docker_cleaner_pro.py --dry-run

# Nettoyage effectif avec volumes
python3 docker_cleaner_pro.py --include-volumes --force

Script recommandé : docker_cleaner_pro.py


2b. Debug Applications & Services

Pods Kubernetes en CrashLoopBackOff

graph LR
    A[Pod KO] --> B[k8s-pod-inspector.sh]
    B --> C{Exit Code ?}
    C -->|137| D[OOMKilled → Augmenter RAM]
    C -->|1| E[App Error → Voir Logs]
    C -->|143| F[SIGTERM → Graceful Shutdown]

    style A fill:#f44336
    style D fill:#4CAF50
    style E fill:#FF9800800800
    style F fill:#4CAF50
# Inspection détaillée d'un pod
./k8s-pod-inspector.sh -n production my-failing-pod

# Accès rapide aux logs
kubectl logs -n production my-failing-pod --previous --tail=100

Script recommandé : k8s-pod-inspector.sh

Problèmes Réseau Conteneurs

# Debug réseau avec netshoot sidecar
./container-net-debug.sh my-container

# Tests inclus : ping, DNS, curl, ports

Script recommandé : container-net-debug.sh


Phase 3 : Analyse Approfondie

Quand utiliser cette phase ?

Les quick fixes n'ont pas résolu le problème, ou vous avez besoin de comprendre la cause racine.

Analyse Base de Données

PostgreSQL - Bloat et Performance

# Vérifier le bloat (fragmentation)
./pg-bloat-check.sh -d production_db -t 30

# Résultat : pourcentage de bloat par table
# Si > 30%, planifier un VACUUM FULL

Script recommandé : pg-bloat-check.sh

MySQL/MariaDB - Audit Sécurité

# Audit de sécurité complet
./mysql-security-audit.sh -u root -H localhost

# Vérifie : utilisateurs sans mot de passe, root@%, etc.

Script recommandé : mysql-security-audit.sh

Redis - Audit des Clés

# Scanner les clés volumineuses (non bloquant)
python3 redis_key_auditor.py --host redis.local --top 50

# Identifie les clés consommant le plus de mémoire

Script recommandé : redis_key_auditor.py

Analyse des Logs

# Extraire les erreurs des dernières 2 heures
./logs-extractor.sh --since "2 hours ago" --level error --output /tmp/errors.log

# Analyse avec patterns connus
grep -E "(OOM|killed|timeout|refused|denied)" /tmp/errors.log

Script recommandé : logs-extractor.sh

Matrice de Diagnostic

Symptôme Outil Métrique Clé
Latence DB pg-bloat-check.sh Bloat > 30%
Mémoire Redis redis_key_auditor.py Top 10 keys size
Pods instables k8s-pod-inspector.sh Restart count, exit codes
Réseau conteneur container-net-debug.sh DNS resolution, connectivity

Phase 4 : Post-Mortem

Documentation Obligatoire

Tout incident résolu doit être documenté pour éviter sa répétition.

Collecte des Preuves

# Extraire tous les logs pertinents
./logs-extractor.sh \
    --since "$(cat /tmp/incident_start_time)" \
    --until "$(date -Iseconds)" \
    --services "nginx,postgresql,docker" \
    --output /tmp/incident_$(date +%Y%m%d)_logs.tar.gz

Script recommandé : logs-extractor.sh

Template Post-Mortem

# Post-Mortem Incident [DATE]

## Résumé
- **Détecté :** HH:MM
- **Résolu :** HH:MM
- **Durée :** X heures
- **Impact :** [Description impact utilisateurs]

## Timeline
| Heure | Événement |
|-------|-----------|
| HH:MM | Alerte reçue |
| HH:MM | Discovery script exécuté |
| HH:MM | Cause identifiée |
| HH:MM | Fix appliqué |
| HH:MM | Service restauré |

## Cause Racine
[Description technique de la cause]

## Actions Correctives
- [ ] Action 1 (responsable, deadline)
- [ ] Action 2 (responsable, deadline)

## Prévention
[Mesures pour éviter que cela se reproduise]

Flowchart Post-Mortem

graph TD
    A[Incident Résolu] --> B[Collecter Logs]
    B --> C[Rédiger Timeline]
    C --> D[Identifier Cause Racine]
    D --> E[Définir Actions Correctives]
    E --> F[Review avec l'équipe]
    F --> G[Publier Post-Mortem]
    G --> H[Suivre Actions]

    style A fill:#4CAF50
    style G fill:#da77f2
    style H fill:#2196F3

Quick Reference

Commandes d'Urgence Linux

# État système rapide
uptime && free -h && df -h

# Top processus CPU
ps aux --sort=-%cpu | head -10

# Top processus RAM
ps aux --sort=-%mem | head -10

# Connexions réseau
ss -tunapl | head -20

# Derniers messages kernel
dmesg --human --reltime | tail -30

Commandes d'Urgence Windows

# État système
Get-ComputerInfo | Select-Object CsName, OsUptime, CsProcessors, CsTotalPhysicalMemory

# Top processus CPU
Get-Process | Sort-Object CPU -Descending | Select-Object -First 10

# Top processus RAM
Get-Process | Sort-Object WorkingSet64 -Descending | Select-Object -First 10

# Services en échec
Get-Service | Where-Object { $_.Status -eq 'Stopped' -and $_.StartType -eq 'Automatic' }

Voir Aussi