feat(alerting): groupe homelab — alerté quand (ou juste avant que) le lab tombe
Helm Charts / Detect changed charts (pull_request) Successful in 2m2s
Helm Charts / Detect changed charts (push) Successful in 10m9s
Helm Charts / Library charts tool (pull_request) Has been skipped
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Application charts pgcat (pull_request) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
Helm Charts / Detect changed charts (pull_request) Successful in 2m2s
Helm Charts / Detect changed charts (push) Successful in 10m9s
Helm Charts / Library charts tool (pull_request) Has been skipped
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Application charts pgcat (pull_request) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
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]>
This commit is contained in:
@@ -1185,6 +1185,57 @@ prometheus: &prometheus_config
|
|||||||
annotations:
|
annotations:
|
||||||
summary: "Prospection — brief produit mais non poussé sur Telegram"
|
summary: "Prospection — brief produit mais non poussé sur Telegram"
|
||||||
description: "La vidéo du brief a été rendue mais l'envoi Telegram a échoué (token/chat_id/API). Voir les logs du CronJob prospection."
|
description: "La vidéo du brief a été rendue mais l'envoi Telegram a échoué (token/chat_id/API). Voir les logs du CronJob prospection."
|
||||||
|
# Santé du socle : être prévenu quand (ou juste avant que) le homelab tombe.
|
||||||
|
# Incident 2026-07-23 : build CI sans limites sur pi1 → RAM épuisée (0 swap),
|
||||||
|
# load15 >100, traefik + apiserver k3s affamés → tout *.arcodange.lab injoignable
|
||||||
|
# (Gitea compris, pourtant sain sur pi2). Prometheus vit sur pi3 et Alertmanager
|
||||||
|
# sur pi2 : cette chaîne d'alerte survit donc à la perte de pi1.
|
||||||
|
- name: homelab
|
||||||
|
rules:
|
||||||
|
- alert: NoeudInjoignable
|
||||||
|
# node-exporter ne répond plus : nœud éteint, réseau HS, ou surcharge telle
|
||||||
|
# que plus rien n'y répond (le cas de l'incident).
|
||||||
|
expr: up{job="kubernetes-service-endpoints", app_kubernetes_io_name="prometheus-node-exporter"} == 0
|
||||||
|
for: 3m
|
||||||
|
labels:
|
||||||
|
severity: critical
|
||||||
|
app: homelab
|
||||||
|
annotations:
|
||||||
|
summary: "Homelab — {{ $labels.node }} est injoignable"
|
||||||
|
description: "node-exporter de {{ $labels.node }} ({{ $labels.instance }}) ne répond plus depuis 3 min : nœud down ou en surcharge sévère."
|
||||||
|
- alert: IngressLabIndisponible
|
||||||
|
# Plus aucun replica traefik dispo — ou kube-state-metrics muet (il vit sur
|
||||||
|
# pi1 : quand pi1 tombe, la métrique disparaît au lieu de passer à 0).
|
||||||
|
expr: >-
|
||||||
|
kube_deployment_status_replicas_available{namespace="kube-system",deployment="traefik"} < 1
|
||||||
|
or absent(kube_deployment_status_replicas_available{namespace="kube-system",deployment="traefik"})
|
||||||
|
for: 3m
|
||||||
|
labels:
|
||||||
|
severity: critical
|
||||||
|
app: homelab
|
||||||
|
annotations:
|
||||||
|
summary: "Homelab — ingress traefik indisponible : *.arcodange.lab est HS"
|
||||||
|
description: "Aucun replica traefik disponible (ou métrique absente = kube-state-metrics muet). Gitea, ArgoCD, Grafana, Vault… sont injoignables via leurs URLs .lab. Gitea reste accessible en direct : http://192.168.1.202:3000."
|
||||||
|
- alert: NoeudPressionMemoire
|
||||||
|
# Précurseur direct de l'incident : <500 Mo dispo sur un Pi 8 Go — sans
|
||||||
|
# swap, le kernel part en thrash bien avant d'atteindre 0.
|
||||||
|
expr: node_memory_MemAvailable_bytes < 500 * 1024 * 1024
|
||||||
|
for: 5m
|
||||||
|
labels:
|
||||||
|
severity: warning
|
||||||
|
app: homelab
|
||||||
|
annotations:
|
||||||
|
summary: "Homelab — mémoire critique sur {{ $labels.node }}"
|
||||||
|
description: "{{ $labels.node }} n'a plus que {{ $value | humanize1024 }}B de mémoire disponible depuis 5 min : risque imminent de thrash (pas de swap sur les Pis). Suspect n°1 : un job CI trop gourmand."
|
||||||
|
- alert: NoeudEnSurcharge
|
||||||
|
expr: node_load15 > 8
|
||||||
|
for: 10m
|
||||||
|
labels:
|
||||||
|
severity: warning
|
||||||
|
app: homelab
|
||||||
|
annotations:
|
||||||
|
summary: "Homelab — {{ $labels.node }} en surcharge (load15 = {{ $value | humanize }})"
|
||||||
|
description: "load15 > 8 depuis 10 min sur {{ $labels.node }} (4 cœurs) : quelque chose sature la machine, l'ingress et l'API k3s sont en danger si c'est pi1."
|
||||||
# groups:
|
# groups:
|
||||||
# - name: Instances
|
# - name: Instances
|
||||||
# rules:
|
# rules:
|
||||||
|
|||||||
Reference in New Issue
Block a user