Files
fotospiel-app/docs/ops/incidents-major.md
2025-11-20 12:31:21 +01:00

4.6 KiB
Raw Blame History

title, sidebar_label
title sidebar_label
Major Incidents & Eskalation 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)?
  1. 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).
  2. 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 sollten als Epics/Tasks in docs/process/todo/* bzw. docs/process/changes/* landen (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.