Fiches réflexes — gérer un incident sur le lab (exercice d’incident de la S7)
Document autonome. Préparation de l’exercice d’incident du vendredi 08/01/2027 (séance S7, réalisation R1, compétence 16 « identifier, qualifier et résoudre un incident ») : le formateur provoque une panne inconnue sur le lab ; il faut identifier, qualifier, résoudre ou escalader, puis écrire un rapport d’incident. Tâche 7.14 du suivi. Le modèle de rapport est dans Modele-rapport-incident.md. Les engagements (99 %, réponse en moins de 2 s, reprise en 4 h) et l’escalade sont ceux du contrat de service (dat/contrat-de-service.md). Adresses : Documentation-pfSense.md §2.
Dernière mise à jour : 12/11/2026 (fiches 4.12 à 4.17 : les 6 règles ajoutées depuis le 02/11 ; 11 services sondés)
Sommaire
| § | Contenu |
|---|---|
| 1 | La méthode en cinq temps |
| 2 | Les deux premières minutes, quelle que soit la panne |
| 3 | Qualifier : gravité, impact, escalade |
| 4 | Les fiches, une par alerte |
| 5 | Quand aucune alerte n’arrive : la plainte d’un utilisateur |
| 6 | Les pièges déjà rencontrés |
| 7 | S’entraîner avant le 08/01 |
1 · La méthode en cinq temps
IDENTIFIER ──► QUALIFIER ──► RÉSOUDRE ou ESCALADER ──► VÉRIFIER ──► RAPPORTER
quoi, depuis gravité, une hypothèse à la fois, le service symptôme → cause →
quand, où ? impact, la plus probable d'abord est revenu ? correction → prévention
niveau
| Temps | Question | Ce qu’on note (pour le rapport) |
|---|---|---|
| Identifier | Qu’est-ce qui ne marche pas, depuis quand, pour qui ? | heure du 1er signe (mail, sonde, plainte), message exact |
| Qualifier | Est-ce grave ? Combien d’utilisateurs ? Qui prévenir ? | gravité, services touchés, niveau d’escalade |
| Résoudre ou escalader | Quelle est la cause ? | chaque hypothèse testée, la commande, le résultat |
| Vérifier | Le service est-il revenu, vu comme un utilisateur ? | heure du retour, mail [RESOLVED], sonde à 1 |
| Rapporter | Que retenir pour que ça ne recommence pas ? | cause racine, mesure préventive, délai de reprise |
Noter l’heure de chaque étape au fil de l’eau (un fichier texte ouvert à côté suffit). Le délai de reprise (engagement : 4 h) se mesure entre l’alerte critique et le retour de la sonde à 1. Sans heures, pas de rapport.
Ne rien changer avant d’avoir regardé. Une correction faite au hasard efface les traces de la cause, et peut aggraver la panne (H-39 : relancer un cluster sans lire l’état des nœuds).
2 · Les deux premières minutes, quelle que soit la panne
| # | Geste | Pourquoi |
|---|---|---|
| 1 | Lire le mail d’alerte en entier, y compris le champ Error | le titre peut tromper : H-66 (« Prometheus » accusé, la vraie cause était Error 1047 de Galera) |
| 2 | Ouvrir le tableau « Lab BTS — Production » : section Services, puis Machines | en un écran : quel service, quelle machine, depuis quand |
| 3 | Se demander ce qui touche plusieurs machines à la fois | toutes les VM lentes en même temps = le dessous (NAS de l’école, H-61 ; hyperviseur, H-67), pas une VM |
| 4 | Regarder les journaux récents (section Journaux, ou la requête ci-dessous) | « qu’est-ce qui a changé ? » : un service arrêté, une connexion, une erreur |
| 5 | Vérifier d’où l’on teste et sur quelle machine on tape (l’invite utilisateur@machine) | H-57 et H-63 : la commande partie sur la mauvaise machine |
Journaux des 15 dernières minutes, par machine (sur srv-supervision, compte en lecture seule) :
mariadb -h 127.0.0.1 -u grafana_lecture -p -e "SELECT hote, programme, gravite, LEFT(message,120) FROM syslog.journaux WHERE recu_le > UTC_TIMESTAMP() - INTERVAL 15 MINUTE AND gravite <= 4 ORDER BY recu_le DESC LIMIT 30;"
les erreurs (gravite 3) et avertissements (4) récents, avec la machine et le programme. Les heures de la base sont en UTC (heure de Paris − 1 h en hiver).
3 · Qualifier : gravité, impact, escalade
| Gravité | Exemples | Impact | Escalade (contrat de service §5) |
|---|---|---|---|
| Critique | site ou DNS injoignable, cluster incomplet, machine éteinte, sauvegarde manquée, rafale de mots de passe faux, supervision aveugle | un service rendu aux utilisateurs est coupé ou menacé maintenant | niveau 1 tout de suite ; niveau 2 (responsable) après 2 h ; niveau 3 (DSI) avant 4 h |
| Avertissement | disque, mémoire, processeur, stockage de sauvegarde, site lent | le service marche, mais risque de tomber | niveau 1, dans la journée |
| Information | disponibilité sur 30 jours sous 99 % | engagement mensuel en danger | bilan mensuel |
Trois questions pour qualifier : combien d’utilisateurs ou de services sont touchés ? Le service est-il coupé ou dégradé ? Y a-t-il un contournement (un nœud de secours, un second serveur web) ? Un service redondé qui perd un élément est dégradé, pas coupé : on le répare sans urgence, mais on le répare (il n’y a plus de secours).
4 · Les fiches, une par alerte
Chaque fiche : ce que ça veut dire, puis quoi vérifier, dans l’ordre, les causes probables, et le retour à
la normale. Toutes les machines s’ouvrent par Termix (bastion 10.0.30.12) ; en dernier recours, la console
Proxmox ne dépend d’aucun réseau.
4.1 Service injoignable (critique)
Sens : une sonde « comme un utilisateur » échoue depuis 2 min. L’étiquette service dit lequel (11 services au
12/11) : site web, GLPI, site public (par Internet), Matomo, PBS, DNS de l’AD, DNS de pfSense, LogAnalyzer, Termix,
Pangolin, Wazuh.
| Ordre | Vérifier | Commande / endroit | Si oui → |
|---|---|---|---|
| 1 | La machine du service répond-elle ? | tableau, section Machines ; sinon fiche 4.2 | fiche 4.2 |
| 2 | Site : HAProxy voit-il ses serveurs ? | page d’état http://10.0.10.5:8404 | serveurs rouges → étape 3 ; tout rouge en base → fiche 4.3 |
| 3 | Site : le service tourne-t-il ? | sur srv-ha : sudo systemctl status haproxy ; sur srv-web-0x : sudo systemctl status apache2 | arrêté → sudo systemctl start … puis relire le statut |
| 4 | Site : configuration cassée ? | sudo haproxy -c -f /etc/haproxy/haproxy.cfg | erreur → corriger la ligne citée, recontrôler, puis sudo systemctl reload haproxy |
| 5 | DNS de l’AD | depuis poste-win11 : Resolve-DnsName www.sio.internal -Server 10.0.30.10 ; sur l’AD : Get-Service DNS | service arrêté → Start-Service DNS |
| 6 | DNS de pfSense | Status → Services : unbound | arrêté → bouton Start |
| 7 | Termix | sur srv-docker : docker ps | conteneur absent ou unhealthy → docker start termix (nom exact : docker ps -a) |
| 8 | Un filtrage a-t-il changé ? | Status → System Logs → Firewall : refus récents vers le service | règle désactivée ou modifiée → la remettre (historique : Diagnostics → Backup & Restore → Config History) |
Retour : mail [RESOLVED], sonde à 1, et le service testé depuis un poste (navigateur sur poste-win11).
4.2 Machine injoignable (critique)
Sens : Prometheus ne lit plus l’exporteur de la machine depuis 2 min. Ce n’est pas forcément la machine qui est tombée : ça peut être seulement son exporteur, ou le réseau entre les deux.
| Ordre | Vérifier | Commande / endroit |
|---|---|---|
| 1 | La VM tourne-t-elle ? | Proxmox : état de la VM (running ?) ; sinon Start et chercher pourquoi elle s’est arrêtée (Tasks, journaux) |
| 2 | Répond-elle sur le réseau ? | depuis le bastion : ping -c3 <adresse> puis ssh |
| 3 | Seul l’exporteur est-il arrêté ? | Linux : sudo systemctl status prometheus-node-exporter ; Windows : Get-Service windows_exporter |
| 4 | La carte réseau et l’étiquette VLAN sont-elles bonnes ? | Proxmox → Hardware → net0 : tag, case Disconnect (test 7.11) |
| 5 | Le pare-feu bloque-t-il ? | journal du pare-feu : refus depuis 10.0.30.14 vers la machine |
Causes vues : exporteur arrêté (test du 29/10), VM éteinte (test du 30/10), carte débranchée (test 7.11).
4.3 Galera incomplet (critique)
Sens : le cluster a moins de 3 nœuds. Avec 2 nœuds, le site marche (mode dégradé) ; avec 1 seul, il refuse
d’écrire (non-Primary) et le site tombe. Si Grafana tombe aussi, seule l’alerte « Supervision aveugle » arrive, avec
Error 1047 (H-66).
Sur chaque nœud (srv-mysql-01, 02, 03) :
sudo mariadb -e "SHOW STATUS WHERE Variable_name IN ('wsrep_cluster_size','wsrep_cluster_status','wsrep_local_state_comment','wsrep_ready');"
| Constat | Cause probable | Action |
|---|---|---|
| un nœud ne répond pas | VM éteinte, MariaDB arrêté | sudo systemctl status mariadb ; sudo journalctl -u mariadb -n 50 ; sudo systemctl start mariadb → il se resynchronise seul |
le survivant est non-Primary | deux nœuds coupés sans prévenir (réseau) | rétablir le réseau des deux autres : le cluster se reforme seul (test 7.11, moins de 10 s) |
| les trois sont arrêtés | arrêt complet | ne rien forcer : lire sudo cat /var/lib/mysql/grastate.dat sur les trois, amorcer seulement le nœud safe_to_bootstrap: 1 (le seqno le plus haut) avec sudo galera_new_cluster, puis démarrer les autres (H-39, MO-2 §8.1) |
Retour : 3, Primary, Synced sur les trois nœuds, site à 200.
4.4 Sauvegarde trop ancienne (critique)
Sens : une VM n’a pas de sauvegarde de moins de 26 h (une nuit manquée).
| Ordre | Vérifier | Où |
|---|---|---|
| 1 | La tâche de 02:00 a-t-elle tourné, et comment s’est-elle terminée ? | Proxmox : Datacenter → Backup et Tasks ; PBS https://10.0.30.13:8007 : Tasks ; mail de compte rendu de PBS |
| 2 | PBS est-il en ligne et joignable par l’hyperviseur ? | sonde PBS ; redirection PVE_HOST → SRV_PBS : 8007 dans pfSense (seul flux entrant) |
| 3 | Le datastore a-t-il de la place ? | PBS → Datastore ; fiche 4.8 |
| 4 | La VM est-elle toujours dans le pool sauvegardé ? | Proxmox : pool SIO2527_Axel |
Action : relancer une sauvegarde de la VM à la main (Backup now) une fois la cause corrigée. Retour : âge < 26 h.
4.5 Disque presque plein (avertissement, > 85 %)
df -h
sudo du -xh / --max-depth=2 2>/dev/null | sort -h | tail -15
journalctl --disk-usage
Causes probables : journaux qui grossissent (un programme trop bavard, H-34), paquets en cache (sudo apt clean),
fichier de test oublié. Sur srv-supervision, vérifier aussi que la purge des journaux tourne
(systemctl list-timers purger-journaux.timer). Ne jamais supprimer dans /var/lib/mysql à la main.
4.6 Mémoire saturée (avertissement, > 90 % pendant 15 min)
D’abord vérifier que ce n’est pas l’hyperviseur (H-67) : si la mémoire totale de la VM a baissé, c’est le ballooning de Proxmox, pas un programme.
free -h
ps aux --sort=-%mem | head -8
Windows : Get-Process | Sort-Object WorkingSet64 -Descending | Select-Object -First 8 Name, @{n='Mo';e={int}}.
Action : relancer le service fautif s’il fuit ; sinon, la VM manque réellement de mémoire (à augmenter dans Proxmox,
en tenant compte de l’hyperviseur partagé).
4.7 Processeur saturé (avertissement, > 90 % pendant 15 min)
ps aux --sort=-%cpu | head -8
Windows : Get-Process | Sort-Object CPU -Descending | Select-Object -First 8 Name, CPU. Causes déjà vues : analyse de
Windows Defender et défragmentation planifiée sur les VM Windows (étape 49.1). Un processus inconnu qui consomme tout
peut aussi être un signe d’intrusion : noter son nom, son compte, sa ligne de commande avant de l’arrêter.
4.8 Datastore PBS presque plein (avertissement, > 80 %)
PBS → Datastore → Summary et Content. Vérifier que l’élagage (Prune, 7 jours) et le ramasse-miettes (Garbage Collection) tournent chaque nuit (Tasks). Une VM qui a beaucoup écrit (les VM Windows, étape 49.1) fait grossir le datastore. Action : réduire la rétention en dernier recours, après accord (niveau 2).
4.9 Connexions refusées en rafale (critique, ≥ 5 refus en 5 min sur une machine)
Sens : quelqu’un se trompe de mot de passe à répétition, ou essaie d’entrer. À traiter comme un incident de sécurité tant que ce n’est pas expliqué.
mariadb -h 127.0.0.1 -u grafana_lecture -p -e "SELECT recu_le, hote, LEFT(message,160) FROM syslog.journaux_auth WHERE recu_le > UTC_TIMESTAMP() - INTERVAL 30 MINUTE AND (message LIKE '%Failed password%' OR message LIKE '%invalid user%' OR message LIKE 'EventID 4625%' OR message LIKE 'EventID 4740%') ORDER BY recu_le DESC LIMIT 30;"
| Question | Où regarder dans le résultat |
|---|---|
| Quelle machine, quel compte ? | hote, « for <compte> » ou « Nom du compte » |
| D’où ? | « from <adresse> » (Linux), « Adresse du réseau source » (Windows) |
| Un compte verrouillé (4740) ? une connexion réussie juste après ? | 4740 ; puis chercher Accepted / 4624 du même compte |
Action : si la source est inconnue ou extérieure, la bloquer (pfSense, ou sshguard déjà actif sur pfSense) ;
changer le mot de passe du compte visé ; prévenir le niveau 2 (incident de sécurité). Si c’est une faute de frappe,
le noter et clore.
4.10 Supervision aveugle (Grafana ne calcule plus les alertes) (critique)
Sens : Grafana n’arrive plus à exécuter ses requêtes : aucune autre alerte ne peut arriver tant que ça dure. Lire le champ Error du mail :
| Error | Cause | Action |
|---|---|---|
| connexion refusée / délai dépassé vers Prometheus | Prometheus arrêté, ou srv-metriques éteint | sur srv-metriques : sudo systemctl status prometheus, curl -s http://10.0.30.14:9090/-/healthy |
Error 1047 … WSREP has not yet prepared node | la base de Grafana (dans Galera) est indisponible : perte de quorum | fiche 4.3 ; le site est sûrement en panne aussi |
Pendant ce temps, surveiller à la main (sondes dans Prometheus, page d’état HAProxy).
4.11 Site lent (avertissement, > 2 s pendant 5 min)
| Ordre | Vérifier | Cause déjà vue |
|---|---|---|
| 1 | Toutes les VM sont-elles lentes en même temps ? (latence disque, tableau section Machines) | le NAS de l’école sature (H-61) |
| 2 | Un nœud Galera est-il compressé par l’hyperviseur ? | ballooning (H-67) |
| 3 | HAProxy : un serveur web est-il tombé (tout passe sur l’autre) ? | page :8404 |
| 4 | Un serveur web sature-t-il (processeur, mémoire) ? | fiches 4.6 et 4.7 |
4.12 lsyncd arrêté (avertissement, 5 min)
Sens : la recopie de wp-content (et des fichiers de GLPI et Matomo) de srv-web-01 vers srv-web-02 est arrêtée :
le serveur de secours peut servir un site différent (H-84, étape 64).
| Ordre | Vérifier | Commande / endroit |
|---|---|---|
| 1 | le service sur srv-web-01 | systemctl status lsyncd ; le relancer : sudo systemctl restart lsyncd |
| 2 | la cause dans son journal | journalctl -u lsyncd -n 50 (clé SSH confinée, srv-web-02 joignable ?) |
4.13 Copie hors site trop ancienne (avertissement, > 30 h pendant 10 min)
Sens : la dernière copie d’au moins une VM sur le NAS d’Axel date de plus de 30 h : la synchronisation de 04:00 n’a pas tourné ou a échoué (étape 65 ; éprouvée par le test T30 le 11/11).
| Ordre | Vérifier | Commande / endroit |
|---|---|---|
| 1 | la tâche de synchronisation s3-nuit | interface de PBS (srv-pbs) → Tâches : statut de la dernière synchronisation vers s3-maison |
| 2 | l’accès au S3 | la règle « Copie hors site injoignable » est-elle aussi en alerte ? (fiche 4.15) |
4.14 VM absente de la copie hors site (avertissement, 1 h)
Sens : une VM est sauvegardée dans le lab mais n’existe pas sur le NAS (nouvelle VM, ou synchronisation incomplète). Normal pour une machine nouvelle : la copie de la nuit suivante la rattrape et l’alerte se résout seule (test T30).
4.15 Copie hors site injoignable (avertissement, 15 min)
Sens : la sonde signée de srv-pbs (toutes les 5 min) n’atteint plus le S3 du NAS : Internet, la box, le reverse
proxy du NAS, l’application SeaweedFS ou les clés (étape 65.2 ; test T30).
| Ordre | Vérifier | Commande / endroit |
|---|---|---|
| 1 | le NAS et son application SeaweedFS | chez Axel (TrueNAS → Apps) |
| 2 | la résolution du nom depuis srv-pbs | getent hosts <nom-du-S3> (une ligne parasite dans /etc/hosts fausserait tout) |
4.16 Intrusion détectée (Wazuh) (critique)
Sens : Wazuh a levé une alerte de niveau 10 ou plus, ou une création de compte. L’étiquette donne la machine et la règle. Toutes ne sont pas des attaques : une vulnérabilité « High » d’un poste neuf, ou un ajout au groupe Administrateurs fait par LAPS, sont aussi de niveau 10 et plus (11/11).
| Ordre | Vérifier | Commande / endroit |
|---|---|---|
| 1 | le détail de l’alerte | tableau de bord de Wazuh (https://10.0.30.16) → Threat Hunting, filtrer sur l’agent et la règle |
| 2 | attendu ou non ? | une action du lab à la même heure (installation, GPO, test) ; sinon, traiter comme un incident (§2 et §3) |
4.17 Serveur retiré par HAProxy (avertissement, 5 min)
Sens : HAProxy a retiré un serveur web (ou un nœud Galera) de son pool : son contrôle de santé échoue. Le site reste servi par l’autre ; les retraits pendant les sauvegardes durent 78 s au plus et ne déclenchent rien (étape 68).
| Ordre | Vérifier | Commande / endroit |
|---|---|---|
| 1 | quel serveur | page de statistiques de HAProxy (http://10.0.10.5:8404) |
| 2 | son service web | systemctl status apache2 sur le serveur retiré ; pour un nœud Galera, la fiche 4.3 |
5 · Quand aucune alerte n’arrive : la plainte d’un utilisateur
Une panne peut ne déclencher aucune alerte (ce que la supervision ne mesure pas). On part alors du poste qui se plaint, et on remonte couche par couche :
| Couche | Test depuis le poste (poste-win11) | Résultat attendu |
|---|---|---|
| Adresse | ipconfig /all | une adresse en 10.0.40.x, passerelle et DNS 10.0.40.1 |
| Passerelle | ping 10.0.40.1 | réponse |
| Nom | Resolve-DnsName www.sio.internal | une adresse |
| Port | Test-NetConnection www.sio.internal -Port 443 | TcpTestSucceeded : True |
| Application | le navigateur | la page s’affiche |
La première couche qui échoue désigne le coupable. Un refus immédiat = une règle de rejet ; une attente qui finit en délai dépassé = un blocage silencieux ou une machine absente (méthode du DAT §9.4). Ouverture de session refusée sur le domaine : heure du poste et de l’AD (Kerberos refuse plus de 5 min d’écart), compte verrouillé (4740).
6 · Les pièges déjà rencontrés
| Piège | Symptôme | Où c’est documenté |
|---|---|---|
| Commande sur la mauvaise machine | « rien ne se passe », ou fichier créé au mauvais endroit | H-57, H-63 |
| Alerte d’avertissement plus courte que l’attente | panne réelle, aucun mail | H-58 |
| L’hôte ou le stockage ralentit tout | toutes les VM lentes à la fois | H-61, H-67 |
| Le titre du mail accuse le mauvais coupable | « Prometheus ne répond plus » alors que c’est Galera | H-66 |
| Relancer un cluster sans lire l’état | données perdues, ou second cluster | H-39 |
Tester une règle TCP avec ping | conclusion fausse | MO-13 §8.4 |
| Coupure de l’accès au lab depuis le PC | « tout est en panne » vu de chez soi | H-60 : vérifier depuis le bastion |
7 · S’entraîner avant le 08/01
Pannes plausibles (exemples pour s’entraîner, pas une liste de ce que fera le formateur) : un service arrêté
(apache2, haproxy, mariadb, unbound), une VM éteinte, une règle pfSense désactivée, une carte réseau débranchée
ou une mauvaise étiquette VLAN, un disque rempli, un compte verrouillé, une heure décalée.
Déjà vécues et documentées, avec leurs preuves : arrêt de Termix, exporteur arrêté, arrêt réel de srv-web-02, nœud
Galera arrêté, perte de quorum (test 7.11 : un exemple de rapport rempli est dans le
modèle), Prometheus arrêté, NAS saturé (H-61).
Le modèle de rapport ouvert, un fichier de notes horodatées prêt
Accès vérifiés le matin : Termix, Grafana, pfSense, Proxmox, page d'état HAProxy
Boîte de l'administrateur ouverte (les mails d'alerte)
Ce document et le Troubleshooting sous la main
Règle d'or : regarder → une hypothèse → la tester → noter → corriger → vérifier comme un utilisateur
La règle à retenir en une phrase : on note l’heure, on lit l’alerte en entier, on teste une hypothèse à la fois en partant de ce qui touche le plus de monde, et on ne déclare la panne résolue qu’une fois le service revu comme un utilisateur.
