Runbook: Déblocage queue saturée¶
PD-3 CA-05 | Temps max: 15 min | Prérequis: Accès SSH
Prérequis¶
- Accès SSH au serveur backend
- Accès Redis CLI
- Mot de passe Redis (Vault:
kv/infra/redis)
Diagnostic¶
1. Identifier la queue saturée¶
redis-cli -a $REDIS_PASSWORD LLEN bull:default:wait
redis-cli -a $REDIS_PASSWORD LLEN bull:backup:wait
redis-cli -a $REDIS_PASSWORD LLEN bull:export:wait
redis-cli -a $REDIS_PASSWORD LLEN bull:blockchain:wait
Seuil d'alerte: > 1000 jobs en attente
2. Vérifier les jobs actifs (bloqués?)¶
Problème potentiel: Jobs actifs depuis longtemps (stalled)
3. Vérifier les workers¶
sudo systemctl status probatiovault-backend
sudo journalctl -u probatiovault-backend -n 50 --no-pager | grep -i "worker\|job\|bull"
Résolution¶
Scénario A: Workers arrêtés¶
Étape 1: Redémarrer le backend¶
Étape 2: Vérifier la reprise¶
Résultat attendu: Queue length diminue progressivement
Scénario B: Jobs stalled (bloqués)¶
Étape 1: Identifier les jobs stalled¶
Étape 2: Forcer le retraitement des jobs stalled¶
Scénario C: Queue flood (trop de jobs soumis)¶
Étape 1: Activer le throttling (si disponible)¶
# Configurer rate limit temporaire
curl -X POST http://localhost:3000/admin/queue/throttle \
-H "Content-Type: application/json" \
-d '{"queue": "default", "maxPerMinute": 100}'
Étape 2: Purger les jobs obsolètes (avec précaution)¶
# Dry run d'abord
curl "http://localhost:3000/jobs/purge?target=redis&olderThan=1h&dryRun=true"
# Purge réelle si nécessaire
curl -X DELETE "http://localhost:3000/jobs/purge?target=redis&olderThan=1h"
Vérification¶
1. Queue length sous le seuil¶
Résultat attendu: < 1000 jobs
2. Jobs en cours de traitement¶
Résultat attendu: > 0 (workers actifs)
3. Vérifier via API¶
Résultat attendu: pending diminue, succeeded augmente
Rollback¶
Si la situation empire:
1. Arrêter la soumission de nouveaux jobs¶
2. Analyser les causes root¶
# Logs détaillés
sudo journalctl -u probatiovault-backend --since "1 hour ago" | grep -E "ERROR|WARN|failed"
3. Contacter l'équipe dev si nécessaire¶
Critère de succès¶
- Queue length < 1000 jobs
- Workers actifs (jobs en cours de traitement)
- Pas de jobs stalled
- API
/jobs/statsmontre une progression normale
Références¶
- PD-3-specification.md: INV-01 (pas de perte), INV-02 (observabilité)
- PD-3-plan.md: Section 6 (QUEUE_FULL)
- TC-NEG-02: Échec massif de tâches