Files
fotospiel-app/docs/ops/incidents-major.md

80 lines
4.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: Major Incidents & Eskalation
sidebar_label: Major Incidents
---
Diese Seite beschreibt, wie du bei größeren Störungen (SEV1/SEV2) vorgehst. Sie ergänzt die spezifischen Runbooks (Public API, MedienPipeline, Photobooth) um einen einheitlichen Rahmen.
## 1. Incident-Klassifikation
- **SEV1 (kritisch)**
- Gäste können nicht mehr hochladen ODER keine Events/Galerien mehr öffnen.
- Tenant Admins können sich nicht einloggen oder keine Kernaktionen ausführen (Events verwalten, Medien moderieren).
- Datenverlust oder potenzieller Datenverlust (z.B. Löschjob auf falscher StorageEbene).
- **SEV2 (hoch)**
- Teilweise Degradation (z.B. PhotoboothUploads hängen, PublicAPI stark verlangsamt, eine Region betroffen).
- Kritische BackgroundJobs (Archivierung, AV/EXIFScans, ZahlungsWebhooks) stauen sich, ohne dass Gäste sofort komplett blockiert sind.
- **SEV3 (mittel)**
- Einzelne Features gestört (NotificationCenter, JoinTokenAnalytics, einzelne AdminViews).
- Workaround möglich (z.B. manuelle Nacharbeit durch Support).
> Wichtig: Jede Störung, die einen zahlenden Eventkunden am Tag des Events blockiert, sollte mindestens als SEV2, ggf. als SEV1 eingeordnet werden.
## 2. Erstmaßnahmen (Triage)
1. **Scope bestimmen**
- Welche Benutzer sind betroffen? (Alle Gäste, einzelne Tenants, nur Photobooth, nur Admins?)
- Betrifft es nur eine Umgebung (staging vs. production)?
2. **Schnell-Checks**
- Status von App, Queue, Redis, DB (Docker/DokployÜbersicht prüfen).
- Horizon/Queues: sind relevante Queues leer, wachsend, „stuck“? Gibt es viele Failed Jobs?
- Logs für relevante Kanäle: `storage/logs/laravel.log`, spezielle Channels wie `storage-jobs`, `notifications`, `billing`, Nginx/ProxyLogs.
- Monitoring: externe UptimeChecks / Dashboards (z.B. PublicAPI Latenz, ErrorRate).
3. **Einordnung & Eskalation**
- SEV1/2: OnCall informieren (Pager/Chat), IncidentKanal im Teamchat eröffnen.
- SEV3: Im IssueTracker erfassen, ggf. gebündelt mit anderen Findings.
Nutze bei PublicAPIProblems zusätzlich das `docs/ops/deployment/public-api-incident-playbook.md`.
## 3. Standard-Runbooks nach Bereich
- **Public API / Gast-Zugriff**
- Siehe `docs/ops/deployment/public-api-incident-playbook.md`.
- Typische Auslöser: Peaks, Abuse, externe Integrationen, Ratenlimits.
- **Medien-Pipeline / Uploads**
- Siehe `docs/ops/media-storage-spec.md` und `docs/ops/guest-notification-ops.md`.
- Fälle: Uploads bleiben im Pending, Archivjobs laufen nicht, Speicherkapazität erreicht, Gäste bekommen „Uploads hängen noch…“.
- **Photobooth**
- Siehe `docs/ops/photobooth/ops_playbook.md`.
- Fälle: FTP nicht erreichbar, Ingest nicht laufend, falsche Credentials, SecurityVorfälle.
- **Abrechnung & Billing**
- Siehe `docs/ops/billing-ops.md`.
- Fälle: Paddle/RevenueCatWebhookFehler, falsche PaketZustände, doppelte/fehlende Buchungen.
Dieses Dokument verweist immer nur auf die jeweils tieferen Runbooks bei konkreten Problemen gehst du dort in die Details.
## 4. Kommunikation
- **Intern (Team)**
- Eröffne einen dedizierten IncidentThread im Chat (mit Zeitstempel, SEVLevel, Kurzbeschreibung).
- Halte dort Statusupdates fest (z.B. „17:05 UploadQueue entstaut, weitere Beobachtung 30 min“).
- Notiere bewusst Entscheidungen (z.B. „19:10 Feature X temporär deaktiviert“, „19:25 Rollback auf vorheriges Release“).
- **Extern (Kunden)**
- Ab SEV2: Überlege einen kurzen Statushinweis (StatusSeite oder manuelle Kommunikation an direkt betroffene Tenants).
- Bei Incidents während Events: Koordiniere mit Success/Support, um proaktiv auf Tenant Admins zuzugehen.
> TODO: Falls du eine StatusSeite oder automatisierte EMails hast, dokumentiere hier, wie und wann sie ausgelöst werden.
## 5. Nachbereitung (Postmortem)
Nach einem SEV1/2 Incident:
1. **Fakten sammeln** (Timeline, betroffene Tenants/Events, konkrete Auswirkungen).
2. **Ursache** (Root Cause) möglichst präzise identifizieren auch dann, wenn direkt „nur“ Symptome gefixt wurden.
3. **Kurzfristige Maßnahmen** (Hotfixes, KonfigAnpassungen, zusätzliche Checks).
4. **Langfristige Maßnahmen** als bd-Issues festhalten (inkl. Link zum Incident).
5. **Dokumentation aktualisieren**
- Relevante Runbooks (dieses Dokument, PublicAPIRunbook, StorageSpec, BillingOps, etc.) mit neuen Learnings ergänzen.
Ziel ist, dass die TimetoDetect und TimetoResolve für ähnliche Probleme in Zukunft sinkt.