suche
ESC

Capstone D: Dienst-Ausfall im HomeLab beheben

Root-Cause-Analyse eines Dienstausfalls über Logs, Monitoring und Storage.

Second-Level HomeLab 40 Min +320 XP

Worum geht’s

Dein selbstgehosteter Dienst antwortet nicht mehr — Nutzer melden Fehler 500. In diesem Capstone führst du eine echte Root-Cause-Analyse durch: vom Symptom über die Logs zur Ursache, mit Querblick auf Monitoring und Storage. Du nutzt alles aus Pfad D zusammen: systematisch messen statt raten, korrelieren statt vermuten, beheben und verifizieren.

Konzept

Eine belastbare Störungsbehebung folgt immer derselben Schleife:

  1. Symptom erfassen — was sehen Nutzer, seit wann, wie reproduzierbar?
  2. Messen vor ändern — Status der Dienste (systemctl/docker ps), Monitoring-Dashboard, dann erste Fehlerzeile im Log in der Zeit.
  3. Korrelieren — Zeitstempel über Dienste hinweg verfolgen, Vorboten (WARN) beachten, an Storage/Ressourcen denken (Volume voll? RAID degraded?).
  4. Hypothese → Fix → Verifikation — eine Ursache annehmen, gezielt korrigieren, dann belegen, dass Symptom und Fehlerzeilen verschwunden sind.
  5. Nachsorge — Alarm/Check ergänzen, damit derselbe Ausfall früher auffällt; Vorfall dokumentieren (Runbook).

Die häufigste Falle: am Symptom (500) herumdoktern, statt der Kausalkette zur echten Ursache zu folgen.

Beispiel-Fall

Gegeben: Container-App liefert 500. Monitoring zeigt seit 08:02 „Service down”. So arbeitest du es ab:

  1. docker ps → web läuft, db läuft. Also kein abgestürzter Container.
  2. Log-Station: docker logs web → erste ERROR-Zeile 08:02:03 connection to postgres refused. Symptom = 500, mutmaßliche Ursache = keine DB-Verbindung.
  3. Korrelieren: docker logs db um 08:02 → FATAL: No space left on device.
  4. Storage-Station: df -h → das DB-Volume ist zu 100 % voll. Root Cause gefunden.
  5. Fix + Verifikation: Alte Backups/Logs aufräumen oder Volume vergrößern, DB neu starten → GET /api/users liefert wieder 200, Monitoring wechselt auf „up”.
  6. Nachsorge: Disk-Usage-Alarm bei 85 % einrichten (vgl. D4), Cleanup-Cronjob planen (vgl. D6).

Anwenden

Arbeite die drei Tool-Stationen in Reihenfolge ab — sie spiegeln die echte RCA-Schleife wider:

▶ Am Tool ausprobieren

Station 1: Die erste Fehlerzeile zeigt die Richtung — folge ihr, nicht dem lautesten Eintrag.

  1. Station 1 — Logs: Füge ein Log mit ERROR ein, filtere auf ERROR und finde die erste Fehlerzeile in der Zeit.
  2. Benenne Symptom und mutmaßliche Ursache aus der Zeile davor.
  3. Notiere den Zeitstempel, um an den anderen Stationen zu korrelieren.
Tool öffnen: /log-viewer ↗
▶ Am Tool ausprobieren

Station 2: Übersetze die Ausfalldauer in verbrauchtes SLA-Budget — das begründet die Nachsorge-Maßnahmen.

  1. Station 2 — Monitoring/SLA: Bestimme, wie viel Ausfallbudget der Vorfall verbraucht hat.
  2. Lies das Monatsbudget deiner Verfügbarkeitsklasse ab und vergleiche mit der Ausfalldauer.
  3. Leite ab, ob ein zusätzlicher Check/Alarm das Budget künftig schützt.
Tool öffnen: /sla-rechner ↗
▶ Am Tool ausprobieren

Station 3: Stelle sicher, dass die Storage-Auslegung samt Frühwarnung den Wiederholungsfall verhindert.

  1. Station 3 — Storage: Prüfe, ob die Kapazitätsplanung den Vorfall (volles Volume) hätte verhindern können.
  2. Rechne durch, wie viel nutzbarer Speicher bei deinem RAID-Level zur Verfügung steht.
  3. Leite eine Kapazitäts-/Monitoring-Maßnahme ab (z. B. Disk-Alarm + größeres Volume).
Tool öffnen: /storage-rechner ↗

Selbsttest

Zunächst der geführte Entscheidungsbaum durch den Vorfall:

Szenario

Praxis-Challenge

⚑ Praxis-Challenge

Spiele den Vorfall durch: Erzeuge (oder nimm) ein Log mit einer „connection refused”-Fehlerkette, finde im Log-Viewer die erste Fehlerzeile, korreliere zur mutmaßlichen Ursache und schreibe ein kurzes Runbook in fünf Schritten (Symptom → Messung → Korrelation → Fix → Nachsorge). Bestimme im SLA-Rechner, wie viel Ausfallbudget der Vorfall gekostet hätte, und im Storage-Rechner eine Kapazitätsmaßnahme, die den vollen-Volume-Fall künftig verhindert.

Tool öffnen: /log-viewer ↗

Reflexion: Was war neu? Wo bist du noch unsicher?

Modul im Speedrun testen →