monitoring: HomelabPrometheusTargetDown + HomelabDiskCritical

Schliesst die zwei in ALERT_RULES.md identifizierten Hoch-Luecken:
- up==0 (5m) als critical in neuer Gruppe homelab-meta — Scrape-Targets
  (node-exporter/cadvisor/blackbox/traefik) sind nicht laenger stille
  Ausfaelle.
- Disk-Critical bei >95% (5m) als critical, zusaetzlich zum bestehenden
  Warning bei >85% — fuer DB/appdata/Cache-Schreibblockaden.

ALERT_RULES.md Tabellen und Status-Abschnitt aktualisiert.
Wird wirksam nach Prometheus-Reload via Komodo-Redeploy des monitoring-Stacks.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-05-30 22:17:51 +02:00
parent 73120869a7
commit 0c08d68d2b
2 changed files with 37 additions and 39 deletions
+17 -39
View File
@@ -47,6 +47,7 @@ Severity-Routing der Bridge: `critical` und `warning` gehen beide auf
| Alarm | Trigger (PromQL, gekuerzt) | Schwelle / `for` | Severity | Was tun | | Alarm | Trigger (PromQL, gekuerzt) | Schwelle / `for` | Severity | Was tun |
|---|---|---|---|---| |---|---|---|---|---|
| `HomelabDiskAlmostFull` | `100*(1-avail/size) > 85` (ohne tmpfs/overlay) | >85% / 10m | warning | Mountpoint aufraeumen / erweitern | | `HomelabDiskAlmostFull` | `100*(1-avail/size) > 85` (ohne tmpfs/overlay) | >85% / 10m | warning | Mountpoint aufraeumen / erweitern |
| `HomelabDiskCritical` | `100*(1-avail/size) > 95` (ohne tmpfs/overlay) | >95% / 5m | critical | Sofort Platz schaffen — Writes drohen zu scheitern (DB, appdata, Cache) |
| `HomelabHighMemoryUsage` | `100*(1-MemAvailable/MemTotal) > 90` | >90% / 10m | warning | Speicherfresser identifizieren, ggf. Container-Limit (F-19) | | `HomelabHighMemoryUsage` | `100*(1-MemAvailable/MemTotal) > 90` | >90% / 10m | warning | Speicherfresser identifizieren, ggf. Container-Limit (F-19) |
| `HomelabTraefik5xx` | `increase(traefik_service_requests_total{5..}[5m]) >= 5` je Service | ≥5 / 2m | warning | Backend des betroffenen Service pruefen | | `HomelabTraefik5xx` | `increase(traefik_service_requests_total{5..}[5m]) >= 5` je Service | ≥5 / 2m | warning | Backend des betroffenen Service pruefen |
@@ -64,6 +65,12 @@ Severity-Routing der Bridge: `critical` und `warning` gehen beide auf
Die Liste der ueberwachten Critical-Container steht in Die Liste der ueberwachten Critical-Container steht in
`services/posture-check/export-prometheus-textfile.sh` (`CRITICAL_CONTAINERS`). `services/posture-check/export-prometheus-textfile.sh` (`CRITICAL_CONTAINERS`).
### Gruppe `homelab-meta`
| Alarm | Trigger (PromQL, gekuerzt) | Schwelle / `for` | Severity | Was tun |
|---|---|---|---|---|
| `HomelabPrometheusTargetDown` | `up == 0` | =0 / 5m | critical | Scrape-Ziel (node-exporter/cadvisor/blackbox/traefik) pruefen — Metriken sind sonst still |
## Bewertung: Sind die Alarme sinnvoll? ## Bewertung: Sind die Alarme sinnvoll?
Insgesamt solide. Die Erreichbarkeits-Gruppe ist gut entworfen — der Insgesamt solide. Die Erreichbarkeits-Gruppe ist gut entworfen — der
@@ -87,40 +94,13 @@ Anmerkungen / Feinschliff (kein Handlungsdruck):
## Bewertung: Fehlt etwas? (Luecken, priorisiert) ## Bewertung: Fehlt etwas? (Luecken, priorisiert)
### Hoch — echter blinder Fleck ### Hoch — erledigt 2026-05-30
1. **Kein `up == 0` auf Scrape-Targets.** Faellt **node-exporter**, **cadvisor**, 1. ~~Kein `up == 0` auf Scrape-Targets~~**`HomelabPrometheusTargetDown`**
**blackbox-exporter** oder **traefik** als Scrape-Ziel aus, verschwinden die umgesetzt (Gruppe `homelab-meta`). Faellt node-exporter/cadvisor/blackbox/
zugehoerigen Metriken still — und mit ihnen die darauf gebauten Alarme. Nur traefik aus, feuert jetzt nach 5 Minuten ein Critical.
der Textfile-Pfad ist ueber `BorgMetricsMissing` / `TextfileExporterStale` 2. ~~Kein Disk-Critical-Tier~~**`HomelabDiskCritical`** bei >95 % umgesetzt
abgesichert, der Rest nicht. Empfohlen: (Gruppe `homelab-host`), zusaetzlich zum bestehenden Warning bei >85 %.
```yaml
- alert: HomelabPrometheusTargetDown
expr: up == 0
for: 5m
labels:
severity: critical
annotations:
summary: "Prometheus target down: {{ $labels.job }} / {{ $labels.instance }}"
description: "Scrape target {{ $labels.instance }} (job {{ $labels.job }}) is unreachable."
```
2. **Kein Disk-Critical-Tier.** Nur ein Warning bei 85 %, kein Critical bei
~95 %. Eine volllaufende Cache-/appdata-Disk blockiert Schreibzugriffe und
damit DB-Writes — fuer Familien-Nutzung teurer als nur Operator-Zeit.
Empfohlen (eng auf kritische Pfade gefiltert):
```yaml
- alert: HomelabDiskCritical
expr: 100 * (1 - node_filesystem_avail_bytes{fstype!~"tmpfs|overlay"} / node_filesystem_size_bytes{fstype!~"tmpfs|overlay"}) > 95
for: 5m
labels:
severity: critical
annotations:
summary: "Disk critically full on {{ $labels.mountpoint }}"
description: "{{ $labels.mountpoint }} is above 95% used."
```
### Mittel — sinnvoll, aber kein Notstand ### Mittel — sinnvoll, aber kein Notstand
@@ -142,10 +122,8 @@ Anmerkungen / Feinschliff (kein Handlungsdruck):
(Container-Memory-Limits) ausloesen wuerde. (Container-Memory-Limits) ausloesen wuerde.
- **Cert/Token-Health jenseits TLS-Ablauf** → `cert-token-check.sh`. - **Cert/Token-Health jenseits TLS-Ablauf** → `cert-token-check.sh`.
## Empfehlung ## Stand
Die zwei Hoch-Luecken (`up == 0` Target-Down und Disk-Critical) sind der Die zwei Hoch-Luecken sind seit 2026-05-30 in `alerts.yml` umgesetzt. Naechster
lohnendste naechste Schritt: wenige Zeilen, schliessen einen echten blinden optionaler Schritt waere der Dead-Man's-Switch ueber einen externen Heartbeat-
Fleck und kosten keine Laufzeit. Umsetzung bewusst als eigener Aenderungsblock, Waechter; ohne familienkritischen Anlass aber nicht eilig.
weil sie `monitoring/prometheus/alerts.yml` aendert und damit einen
Prometheus-Reload/Komodo-Deploy nach sich zieht.
+20
View File
@@ -57,6 +57,15 @@ groups:
summary: "Disk usage high on {{ $labels.mountpoint }}" summary: "Disk usage high on {{ $labels.mountpoint }}"
description: "{{ $labels.mountpoint }} is above 85% used." description: "{{ $labels.mountpoint }} is above 85% used."
- alert: HomelabDiskCritical
expr: 100 * (1 - node_filesystem_avail_bytes{fstype!~"tmpfs|overlay"} / node_filesystem_size_bytes{fstype!~"tmpfs|overlay"}) > 95
for: 5m
labels:
severity: critical
annotations:
summary: "Disk critically full on {{ $labels.mountpoint }}"
description: "{{ $labels.mountpoint }} is above 95% used. Writes may start to fail (DB, appdata, cache)."
- alert: HomelabHighMemoryUsage - alert: HomelabHighMemoryUsage
expr: 100 * (1 - node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) > 90 expr: 100 * (1 - node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) > 90
for: 10m for: 10m
@@ -130,3 +139,14 @@ groups:
annotations: annotations:
summary: "Critical container is down: {{ $labels.name }}" summary: "Critical container is down: {{ $labels.name }}"
description: "The host textfile exporter reports that critical container {{ $labels.name }} is not running." description: "The host textfile exporter reports that critical container {{ $labels.name }} is not running."
- name: homelab-meta
rules:
- alert: HomelabPrometheusTargetDown
expr: up == 0
for: 5m
labels:
severity: critical
annotations:
summary: "Prometheus target down: {{ $labels.job }} / {{ $labels.instance }}"
description: "Scrape target {{ $labels.instance }} (job {{ $labels.job }}) is unreachable. Metrics from this target are silent — alerts built on them will not fire."