2.8 KiB
2.8 KiB
SPEC-healer: Deterministisches Autohealing
Paket: knaster.healer.
1. Eingang
Alertmanager-Webhook (Version 4) an POST /v1/healer/alertmanager. Pro Alert werden status (firing/resolved), labels, annotations und fingerprint verarbeitet.
2. Regeln (config/healer-rules.yaml)
rules:
- id: slot-endpoint-down
match: {alertname: SlotEndpointDown} # alle Labels müssen gleich sein
ladder:
- {action: restart_container, params: {host: "{node}", container: "{container}"}, attempts: 2, cooldown: 5m}
- {action: restart_vm, params: {vmid: "{vmid}", pve_node: "{pve_node}"}, attempts: 1, cooldown: 15m}
- {action: mark_slot, params: {slot: "{slot}", status: degraded}, attempts: 1}
on_exhausted: notify
on_resolved: [{action: mark_slot, params: {slot: "{slot}", status: ok}, only_if_set_by_healer: true}]
{label} wird aus den Alert-Labels ersetzt. Fehlt ein Label, wird die Stufe übersprungen und im Ergebnis vermerkt.
3. Ablauf pro Alert (firing)
- Erste passende Regel suchen (Reihenfolge der Datei). Passt keine, wird nur benachrichtigt (
unmatched). - Zustand pro
(rule_id, fingerprint): Versuche pro Stufe und Zeitpunkt der letzten Aktion. - Ist der Cooldown der letzten Aktion noch nicht vorbei, passiert nichts (
cooldown). - Sonst wird die erste Stufe genommen, deren Versuchsbudget noch nicht erschöpft ist. Vor der Ausführung entscheidet die Policy (SPEC-maintenance §2): Bei
autowird ausgeführt, beiapproveentsteht ein Vorschlag (Quellehealer) und die Stufe gilt als verbraucht. - Sind alle Stufen erschöpft, wird einmalig benachrichtigt (
exhausted). - Ein globaler Schutz begrenzt die Infrastruktur-Aktionen auf
max_actions_per_hour(Standard 10). Darüber wird nur noch benachrichtigt.
resolved: Die on_resolved-Aktionen laufen, und der Zustand des Fingerprints wird gelöscht.
4. Treiber (knaster.healer.drivers)
| Aktion | Treiber | API |
|---|---|---|
restart_container |
Portainer | POST /api/endpoints/{endpoint}/docker/containers/{container}/restart |
restart_vm |
Proxmox | POST /api2/json/nodes/{pve_node}/qemu/{vmid}/status/reboot |
reboot_host |
Proxmox | POST /api2/json/nodes/{pve_node}/status (command=reboot) |
mark_slot |
Registry | Laufzeitzustand |
notify |
Webhook (n8n) | POST NOTIFY_WEBHOOK_URL |
Alle Treiber haben einen Dry-Run-Modus (Standard: an). Ein globales KNASTER_DRY_RUN=false schaltet die Ausführung frei, zusätzlich muss der Treiber pro Aktion in config/healer-rules.yaml unter enabled_actions aufgeführt sein.
5. Mitgelieferte Alerts (deploy/prometheus/alerts.yml)
SlotEndpointDown, SlotCanaryFailing, GpuXidError, GpuTemperatureHigh, VllmKvCacheSaturated, NodeDown, DiskAlmostFull.