Troubleshooting Center
Une méthode, des fiches incident réelles et des scénarios Break-Fix pour apprendre à diagnostiquer sous pression.
Méthode
- 01
Détecter
- 02
Isoler
- 03
Diagnostiquer
- 04
Corriger
- 05
Vérifier
- 06
Documenter
Scénarios Break-Fix
Break-Fix : la boutique est hors ligne après un changement de configuration
Un collègue a modifié la configuration du reverse proxy de la boutique juste avant de partir. NGINX refuse de démarrer. Remettez le site en ligne.
Break-Fix : le catalogue produits renvoie une erreur 500
Après une réinstallation du serveur, l'application répond « internal error » à toutes les requêtes. Lisez les journaux, corrigez l'environnement, sans redémarrer l'application ni la lancer en root.
Break-Fix : l'application n'atteint plus son API interne
Après une migration, le client applicatif affiche « Connection timed out ». L'API tourne pourtant bien. Remontez les couches, trouvez les deux erreurs et réparez.
Break-Fix : le rapport nocturne n'est plus produit
Le métier signale que le rapport quotidien n'arrive plus depuis la migration du script depuis un poste Windows. La tâche cron est pourtant présente. Trouvez pourquoi rien ne s'exécute.
Break-Fix : le service d'export échoue avec « Permission denied »
Depuis la dernière mise en production, le service d'export nocturne s'arrête immédiatement. Diagnostiquez et réparez sans donner plus de droits que nécessaire.
Break-Fix : le tableau de bord applicatif est vide
Depuis la dernière version, node_exporter rejette le fichier de métriques applicatives et le tableau de bord n'affiche plus rien. Corrigez le générateur.
Break-Fix : l'audit CSPM bloque la mise en production
Le pipeline refuse de déployer : l'analyse de posture a détecté des configurations critiques dans la définition d'infrastructure. Corrigez-les avant la fenêtre de mise en production.
Break-Fix : postes non enregistrés et audio unidirectionnel
Après une modification de la configuration PJSIP, plus aucun poste ne s'enregistre et les rares appels n'ont du son que dans un sens. Analysez les fichiers de configuration et corrigez.
Break-Fix : l'écran « Mon compte » met 8 secondes à s'afficher
Deux requêtes de la page « Mon compte » parcourent intégralement des tables de plusieurs dizaines de milliers de lignes. Lisez les plans d'exécution et créez les bons index.
Break-Fix : fusion bloquée et pipeline rouge avant la mise en production
La fusion du correctif `hotfix` dans `main` est restée en plein conflit et les tests échouent. Terminez proprement la fusion en respectant les deux exigences.
Break-Fix : le service d'inférence ne démarre plus après la mise à jour du modèle
L'équipe data a publié la version v3 du modèle de sentiment et supprimé la v2. Depuis, l'API d'inférence est indisponible. Remettez-la en service sur le port attendu par les clients (8500).
Break-Fix : le test de restauration trimestriel échoue
Les sauvegardes « réussissent » chaque nuit, mais le test de restauration du PRA échoue : la base métier est absente de l'archive. Corrigez la sauvegarde et rendez-la vérifiable.
Break-Fix : le pipeline clients plante depuis le changement de fournisseur
Le nouveau fournisseur livre un fichier CSV différent : le pipeline Python s'arrête sur une erreur d'encodage. Corrigez-le pour produire un fichier propre, en UTF-8, sans doublon.
Break-Fix : l'application ne joint plus sa base après la migration
La base de données a été migrée vers une nouvelle instance. L'application échoue avec « could not connect ». Suivez la méthode de diagnostic d'un flux (résolution, routage, écoute, applicatif), réparez la configuration et mettez la matrice de flux à jour.
Break-Fix : éradiquer la persistance d'un attaquant
Le SOC signale des connexions sortantes suspectes toutes les 5 minutes depuis un serveur. Trouvez les trois mécanismes de persistance laissés par l'attaquant et éradiquez-les sans casser les accès légitimes.
Fiches incident
Adresse IP virtuelle présente sur les deux nœuds (split-brain keepalived)
Connexions intermittentes vers le service : une requête sur deux échoue ou tombe sur un nœud différent ; conflits ARP signalés par les switchs.
```text
Keepalived_vrrp: (VI_1) Entering MASTER STATE ← sur les deux nœuds
kernel: IPv4: 10.0.1.100 from 00:16:3e:aa:bb:02, on dev eth0 — duplicate address
```Données exposées publiquement par un bucket mal configuré
Alerte CSPM « bucket accessible publiquement » ; un chercheur en sécurité signale que des exports clients sont téléchargeables sans authentification.
```text
curl -I https://exports-partenaire.s3.eu-west-3.amazonaws.com/clients_2026-09.csv
HTTP/1.1 200 OK
```Panne générale due à un certificat TLS expiré
Du jour au lendemain, navigateurs et clients API refusent la connexion au service ; les appels entre microservices échouent également.
```text
curl: (60) SSL certificate problem: certificate has expired
NET::ERR_CERT_DATE_INVALID
```PostgreSQL refuse les connexions « too many clients already »
L'application renvoie des erreurs 500 en rafale ; les nouveaux pods ou workers n'arrivent pas à se connecter à la base. Le problème apparaît après une montée en charge ou un scale-out.
```text
FATAL: sorry, too many clients already
FATAL: remaining connection slots are reserved for non-replication superuser connections
```Rafales d'INVITE vers l'international (tentative de fraude téléphonique)
Pic de CPU sur l'IPBX la nuit, milliers de tentatives d'appel vers des numéros internationaux surtaxés, alerte de l'opérateur sur la consommation.
```text
NOTICE: Request 'INVITE' from '"1001" <sip:1001@203.0.113.25>' failed for '198.51.100.7' - Wrong password
NOTICE: Call from '1004' to '00882…' — chan_pjsip
```Sauvegardes « vertes » mais restauration impossible
Lors d'un incident (suppression accidentelle), la restauration échoue alors que le tableau de bord des sauvegardes est vert depuis des mois.
```text
gzip: stdin: unexpected end of file
tar: Unexpected EOF in archive
pg_restore: error: input file does not appear to be a valid archive
```Attaque par force brute SSH détectée sur un serveur exposé
Le SIEM remonte des centaines d'échecs d'authentification SSH par minute depuis quelques adresses ; la charge du serveur augmente.
```text
sshd[2211]: Failed password for invalid user admin from 45.95.0.12 port 51234 ssh2
sshd[2213]: Failed password for root from 45.95.0.12 port 51240 ssh2
```Audio unidirectionnel sur les appels via Internet (NAT et SDP)
Les appels s'établissent, mais l'appelé n'entend pas l'appelant (ou l'inverse). Le problème ne concerne que les postes distants (télétravail) ou le trunk opérateur.
Aucune erreur SIP : `200 OK` et `ACK` sont échangés. `rtp set debug on` montre des paquets envoyés mais aucun reçu d'un côté.Changement en échec sans plan de retour arrière
Une mise à jour applicative nocturne provoque des erreurs ; l'équipe tente de corriger « en avant » pendant trois heures et l'indisponibilité déborde sur les heures ouvrées.
```text
ERROR: column "customer_ref" does not exist
Migration 0042 partially applied
```Connexions coupées par un routage asymétrique à travers un pare-feu à états
Certaines connexions entre deux zones s'établissent puis se figent, ou échouent de façon aléatoire ; le ping passe.
```text
kernel: nft-drop-fwd: IN=eth1 OUT=eth0 SRC=10.20.1.15 DST=10.10.2.30 PROTO=TCP SPT=5432 DPT=51544 ACK
conntrack: state INVALID
```Disque plein alors que « du » ne trouve rien (fichiers supprimés encore ouverts)
`df -h` indique 100 % d'occupation sur `/var`, les services échouent à écrire (`No space left on device`), mais `du -sh /var/*` totalise beaucoup moins que la taille utilisée.
```text
write error: No space left on device
```Erreur 500 après mise en production (variable d'environnement manquante)
Juste après une mise en production, certaines pages renvoient 500 ; la page d'accueil fonctionne. Aucune erreur en préproduction.
```text
KeyError: 'DATABASE_URL'
sqlite3.OperationalError: unable to open database file
```L'application n'atteint plus la base après une migration de sous-réseau
Après le déplacement des serveurs applicatifs dans un nouveau sous-réseau, l'application ne démarre plus : délai d'attente vers la base de données.
```text
psycopg.OperationalError: connection to server at "10.0.4.30", port 5432 failed: Connection timed out
FATAL: no pg_hba.conf entry for host "10.0.13.21", user "app", database "orders"
```NGINX renvoie 502 Bad Gateway
Le site affiche « 502 Bad Gateway » ; les fichiers statiques servis directement par NGINX fonctionnent.
```text
connect() failed (111: Connection refused) while connecting to upstream, upstream: "http://127.0.0.1:8000/"
upstream prematurely closed connection while reading response header from upstream
connect() to unix:/run/php/php-fpm.sock failed (13: Permission denied)
```Pod Kubernetes en CrashLoopBackOff après un déploiement
Après un `kubectl apply`, les nouveaux pods redémarrent en boucle ; le rollout reste bloqué et l'ancienne version sert encore une partie du trafic.
```text
NAME READY STATUS RESTARTS
api-7c9f6d8b9-x2k4p 0/1 CrashLoopBackOff 6
Last State: Terminated Reason: OOMKilled Exit Code: 137
```Retard de réplication croissant et disque WAL qui se remplit
Les lectures sur la réplique renvoient des données anciennes de plusieurs minutes ; sur le primaire, le répertoire `pg_wal` grossit rapidement.
```text
WARNING: could not write to file "pg_wal/xlogtemp.1234": No space left on device
```Service d'inférence qui échoue sous charge (mémoire GPU saturée)
Le service de génération répond correctement à faible trafic, puis renvoie des 500 et redémarre lors des pics ; la latence p99 explose avant les erreurs.
```text
torch.OutOfMemoryError: CUDA out of memory. Tried to allocate 1.50 GiB (GPU 0; 23.65 GiB total capacity; 22.10 GiB already allocated)
```Service systemd en échec « Permission denied » après déploiement
Après une mise à jour, le service applicatif ne démarre plus. `systemctl status` affiche `failed` et redémarre en boucle.
```text
app.service: Failed at step EXEC spawning /opt/app/bin/start: Permission denied
PermissionError: [Errno 13] Permission denied: '/opt/app/config/app.yml'
```Tomcat qui ralentit puis plante (OutOfMemoryError)
Temps de réponse qui se dégradent sur plusieurs heures, CPU à 100 %, puis arrêt de l'application. Le problème revient quelques jours après chaque redémarrage.
```text
java.lang.OutOfMemoryError: Java heap space
[GC (Allocation Failure) ... Full GC (Ergonomics) ... 1998M->1995M(2048M), 4.2 secs]
```Voisinage OSPF bloqué en EXSTART/EXCHANGE (MTU différente)
Deux routeurs se voient mais le voisinage OSPF n'atteint jamais l'état `FULL` ; il oscille entre `EXSTART` et `EXCHANGE`. Les routes de la zone distante n'apparaissent pas.
```text
%OSPF-5-ADJCHG: Process 1, Nbr 10.255.0.2 on Gi0/1 from EXSTART to DOWN, Neighbor Down: Too many retransmissions
```Alertes qui clignotent en boucle (flapping) et fatigue d'astreinte
L'astreinte reçoit des dizaines de notifications par nuit pour la même alerte qui passe de *firing* à *resolved* toutes les quelques minutes ; les vraies alertes finissent ignorées.
```text
[FIRING:1] HighCPU web-03 … [RESOLVED] HighCPU web-03 … [FIRING:1] HighCPU web-03
```AccessDenied sur un bucket S3 malgré une politique IAM correcte
Un traitement exécuté sur EC2 échoue à lire ou écrire dans un bucket ; la politique IAM du rôle semble autoriser l'action.
```text
An error occurred (AccessDenied) when calling the PutObject operation: Access Denied
```Appels API bloqués par le navigateur (CORS)
Le front web n'arrive plus à appeler l'API après son déplacement sur un nouveau domaine ; `curl` fonctionne parfaitement.
```text
Access to fetch at 'https://api.exemple.fr/v1/orders' from origin 'https://app.exemple.fr' has been blocked by CORS policy:
Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present.
```Application qui joint une ancienne IP après une migration (entrée /etc/hosts obsolète)
Après la migration d'une API vers un nouveau serveur, un seul serveur applicatif continue d'appeler l'ancienne adresse ; `dig` renvoie pourtant la nouvelle IP.
```text
curl: (7) Failed to connect to api.interne port 8443: Connection timed out
```