Incident 2026-07-23 : un build CI sans limites a épuisé la RAM de pi1 → load15 > 150 → traefik + apiserver affamés → tout *.arcodange.lab injoignable pendant ~1h, et personne n'est prévenu — on le découvre en le subissant. (Le correctif de la cause racine est côté factory : plafonds cgroup sur les jobs act_runner.)
Quatre règles, groupe homelab
Alerte
Sévérité
Signal
NoeudInjoignable
critical
node-exporter muet 3 min — nœud down ou noyé
IngressLabIndisponible
critical
0 replica traefik dispo ou métrique absente (kube-state-metrics vit sur pi1) — *.arcodange.lab HS
NoeudPressionMemoire
warning
< 500 Mo dispo pendant 5 min — le précurseur exact de l'incident, avant le thrash
NoeudEnSurcharge
warning
load15 > 8 pendant 10 min
Livraison par la chaîne Alertmanager → Telegram déjà en place (testée live 2026-07-10) ; aucun changement de route nécessaire (receiver par défaut). Prometheus tourne sur pi3 et Alertmanager sur pi2 : la chaîne survit à la perte de pi1.
Validation
YAML re-parsé, exprs soumises au parseur PromQL du Prometheus live : 4/4 OK.
Pendant la rédaction (incident en cours de résorption), IngressLabIndisponible matchait traefik=0 replica et NoeudEnSurcharge matchait pi1 load15=73 — les règles détectent l'incident réel qui les a motivées.
Hot-reload assuré par le sidecar configmap-reload du chart, rien à redémarrer après merge/sync ArgoCD.
Suite
Le lendemain matin (24/07), deuxième mode de panne non couvert par ces 4 règles : wildcard TLS expiré sans renouvellement (« le https ne fonctionne plus » alors que tout était vert) → 5ᵉ règle CertificatNonRenouvele dans la PR #14.
## Pourquoi
Incident 2026-07-23 : un build CI sans limites a épuisé la RAM de pi1 → load15 > 150 → traefik + apiserver affamés → **tout `*.arcodange.lab` injoignable pendant ~1h**, et personne n'est prévenu — on le découvre en le subissant. (Le correctif de la cause racine est côté `factory` : plafonds cgroup sur les jobs act_runner.)
## Quatre règles, groupe `homelab`
| Alerte | Sévérité | Signal |
|---|---|---|
| `NoeudInjoignable` | critical | node-exporter muet 3 min — nœud down ou noyé |
| `IngressLabIndisponible` | critical | 0 replica traefik dispo **ou métrique absente** (kube-state-metrics vit sur pi1) — `*.arcodange.lab` HS |
| `NoeudPressionMemoire` | warning | < 500 Mo dispo pendant 5 min — le précurseur exact de l'incident, avant le thrash |
| `NoeudEnSurcharge` | warning | load15 > 8 pendant 10 min |
Livraison par la chaîne **Alertmanager → Telegram déjà en place** (testée live 2026-07-10) ; aucun changement de route nécessaire (receiver par défaut). Prometheus tourne sur **pi3** et Alertmanager sur **pi2** : la chaîne survit à la perte de pi1.
## Validation
- YAML re-parsé, exprs soumises au parseur PromQL du Prometheus live : 4/4 OK.
- Pendant la rédaction (incident en cours de résorption), `IngressLabIndisponible` matchait `traefik=0 replica` et `NoeudEnSurcharge` matchait `pi1 load15=73` — les règles détectent l'incident réel qui les a motivées.
- Hot-reload assuré par le sidecar configmap-reload du chart, rien à redémarrer après merge/sync ArgoCD.
## Suite
Le lendemain matin (24/07), deuxième mode de panne non couvert par ces 4 règles : wildcard TLS expiré sans renouvellement (« le https ne fonctionne plus » alors que tout était vert) → 5ᵉ règle `CertificatNonRenouvele` dans la **PR #14**.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Incident 2026-07-23 : un build CI sans limites a épuisé la RAM de pi1 (0 swap),
load15 >100, traefik + apiserver affamés → tout *.arcodange.lab injoignable,
Gitea compris (pourtant sain sur pi2). Personne n'est prévenu : on subit.
Quatre règles, livrées par la chaîne Telegram déjà en place (testée live) :
- NoeudInjoignable (critical) : node-exporter muet 3 min — nœud down ou noyé.
- IngressLabIndisponible (critical) : 0 replica traefik dispo, ou métrique
absente (kube-state-metrics vit sur pi1) — *.arcodange.lab est HS.
- NoeudPressionMemoire (warning) : <500 Mo dispo 5 min — le précurseur exact
de l'incident, déclenche avant le thrash.
- NoeudEnSurcharge (warning) : load15 >8 pendant 10 min.
Exprs validées contre le Prometheus live (parse + match) : pendant la rédaction,
IngressLabIndisponible et NoeudEnSurcharge matchaient l'incident en cours.
Prometheus (pi3) et Alertmanager (pi2) survivent à la perte de pi1.
Co-Authored-By: Claude Fable 5 <[email protected]>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Pourquoi
Incident 2026-07-23 : un build CI sans limites a épuisé la RAM de pi1 → load15 > 150 → traefik + apiserver affamés → tout
*.arcodange.labinjoignable pendant ~1h, et personne n'est prévenu — on le découvre en le subissant. (Le correctif de la cause racine est côtéfactory: plafonds cgroup sur les jobs act_runner.)Quatre règles, groupe
homelabNoeudInjoignableIngressLabIndisponible*.arcodange.labHSNoeudPressionMemoireNoeudEnSurchargeLivraison par la chaîne Alertmanager → Telegram déjà en place (testée live 2026-07-10) ; aucun changement de route nécessaire (receiver par défaut). Prometheus tourne sur pi3 et Alertmanager sur pi2 : la chaîne survit à la perte de pi1.
Validation
IngressLabIndisponiblematchaittraefik=0 replicaetNoeudEnSurchargematchaitpi1 load15=73— les règles détectent l'incident réel qui les a motivées.Suite
Le lendemain matin (24/07), deuxième mode de panne non couvert par ces 4 règles : wildcard TLS expiré sans renouvellement (« le https ne fonctionne plus » alors que tout était vert) → 5ᵉ règle
CertificatNonRenouveledans la PR #14.🤖 Generated with Claude Code