From d73a3b76580882f722c270e2736252ffb3df4d50 Mon Sep 17 00:00:00 2001 From: Thore Cimbal Date: Fri, 14 Aug 2026 12:00:00 +0000 Subject: [PATCH] =?UTF-8?q?docs(issues):=20#0030=20cadence=20set=20?= =?UTF-8?q?=E2=80=94=20monthly=20drill,=20and=20backups=20now=20alert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Monthly restore-drill CronJob (verified before commit) plus the finding that mattered more: there was no backup alerting at all, so a failed nightly job would have gone unnoticed. Added BackupJobFailed/BackupNotRunning/ RestoreDrillStale; the last one alerts on the absence of the check itself. Alert rules still need deploying on CFGMON. Co-Authored-By: Claude Opus 4.8 --- ...estore-ist-nie-geprobt-sicherungen-sind.md | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/docs/issues/0030-der-restore-ist-nie-geprobt-sicherungen-sind.md b/docs/issues/0030-der-restore-ist-nie-geprobt-sicherungen-sind.md index 7ee2fd0..53e7a76 100644 --- a/docs/issues/0030-der-restore-ist-nie-geprobt-sicherungen-sind.md +++ b/docs/issues/0030-der-restore-ist-nie-geprobt-sicherungen-sind.md @@ -189,3 +189,48 @@ einen Mirror. Begründung steht im README des Notfallhandbuchs, damit sie nicht Das ist eine **dauerhafte Ausnahme von der Spiegel-Topologie** (ADR-0001) und daher als **ADR-0016** festgehalten. + +## Schritt 4 erledigt 2026-08-14 — Rhythmus festgelegt (automatisiert + überwacht) + +**Monatlich, 4. um 04:20**, als CronJob `restore-drill` +(`gitops:apps/production/restore-drill.yaml`, Commit `b61dfd9`) — nach den nächtlichen +Backups, damit er den frischen Stand zieht. Er spielt die Sicherungen in eine +Wegwerf-Postgres **im Pod** zurück und besteht nur, wenn Zeilen ankommen. Vor dem Commit +manuell ausgelöst und bestanden (synapse 31.908, MAS 16.085, wiki 251). + +**Automatisiert statt dokumentiert:** ein Prüfrhythmus, den niemand ausführt, ist derselbe +Fehler wie ein ungetestetes Backup — nur eine Ebene höher. + +**Abdeckung:** synapse + matrixauthenticationservice + wiki (die unersetzlichen Daten). +Authentik ist bewusst **nicht** im automatischen Lauf: Flows/Provider liegen als Blueprints +deklarativ im Repo, die DB ist also weitgehend reproduzierbar — und der Job müsste sonst +wegen der namespace-gebundenen Credentials dupliziert werden. Auf Zuruf über +`notfall.sh` Stufe 3 (deckt alle drei Repos ab) jederzeit prüfbar. + +### Nebenbefund, der wichtiger war als der Rhythmus selbst + +**Es gab überhaupt keine Alarmregel zu Backups.** Ein fehlgeschlagenes nächtliches Backup +wäre unbemerkt geblieben — exakt der stille Ausfall, den dieses Issue beschreibt, nur an +der Stelle, die ihn hätte melden sollen. Behoben in +`threadnet-operating:monitoring/prometheus/alerts.yml` (Commit `1bbff5e`), neue Gruppe +`axion-backup`: + +| Alarm | feuert wenn | +|---|---| +| `BackupJobFailed` | ein Backup- oder Probe-Job fehlschlägt | +| `BackupNotRunning` | ein CronJob seit >26h nicht mehr geplant hat | +| `RestoreDrillStale` | die Probe seit >40 Tagen nicht lief | + +Der letzte ist Absicht: **auch das Ausbleiben der Prüfung ist ein Alarm.** Metrikweg +verifiziert (kube-state-metrics → Alloy → remote_write; der Filter verwirft nur +`go_.*|process_.*`, `kube_job_*`/`kube_cronjob_*` kommen an). + +⚠️ **Deploy offen:** Die Alarmregeln liegen im Repo, sind aber noch **nicht auf CFGMON +ausgerollt** (Prometheus dort, kein Zugang von hier). Bis zum Reload greifen sie nicht. + +### Restaufwand + +Nur noch **Phase A/B**: Wiederanlauf auf einem leeren Host (K3s, die zwei Bootstrap-Secrets, +Flux) und die Rückspielung der Synapse-**Medien** sind weiterhin abgeleitet, nicht erprobt — +dafür braucht es eine Wegwerf-Umgebung. Ebenso ungeprüft: die Homelab-Seite +(GitLab/Overmind → MinIO/DSM).