Vorfallmanagement für High-Velocity-Teams
Nachbereitung von Vorfällen
Wir bei Atlassian nutzen die Nachbereitung ohne Schuldzuweisungen, um die grundlegende Ursache von Vorfällen mit einem Schweregrad von mindestens 2 zu ermitteln und zu beheben. Hier findest du eine Zusammenfassung unserer internen Dokumentation zur Nachbereitung bei Atlassian.
Das Handbuch in gedruckter Form oder als PDF
Wir haben eine begrenzte Auflage unseres Handbuchs zum Vorfallmanagement drucken lassen und versenden diese Handbücher kostenlos. Alternativ kannst du die PDF-Version herunterladen.
Feld | Anweisungen | Beispiel |
Zusammenfassung des Vorfalls | Fasse den Vorfall in einigen Sätzen zusammen. Die Zusammenfassung sollte den Schweregrad, die Begründung dafür und die Dauer der Auswirkungen beinhalten. | Am Das Ereignis wurde von Dieser Vorfall mit Zu diesem Vorfall wurden |
Ereignisse im Vorfeld | Beschreibe die Umstände, die zu diesem Vorfall geführt haben, beispielsweise vorangegangene Änderungen, durch die latente Bugs eingeführt wurden. | Am |
Fehler | Beschreibe, was nicht wie erwartet funktioniert hat. Füge Screenshots von relevanten Diagrammen oder Daten an, die den Fehler zeigen. | Im Verlauf von |
Auswirkungen | Beschreibe, was interne und externe Kunden während des Vorfalls beobachtet haben. Gib an, wie viele Supporttickets erstellt wurden. | Am Davon waren Es wurden |
Erkennung | Wann und wie hat Atlassian den Vorfall erkannt? Wie könnte die Erkennungszeit verbessert werden? Als Gedankenexperiment: Wie hättest du die Zeit halbieren können? | Der Vorfall wurde erkannt, als |
Antwort | Wer hat wann wie reagiert? Gab es Verzögerungen oder Hindernisse bei der Reaktion? | Nachdem er um 14:34 Uhr UTC benachrichtigt wurde, betrat der KITT Engineer um 14:38 Uhr den Chatraum für den Vorfall. Der zuständige Engineer verfügte jedoch nicht über ausreichend Hintergrundwissen zum Escalator-System für die automatische Skalierung. Daher wurde um 14:50 Uhr eine weitere Benachrichtigung versendet, woraufhin um 14:58 Uhr ein erfahrener KITT Engineer den Chatraum betrat. |
Wiederherstellung | Beschreibe, wie und wann der Service wiederhergestellt wurde. Wie bist du an den Punkt gelangt, an dem du wusstest, wie die Auswirkungen beseitigt werden können? Je nach Szenario kannst du weitere Fragen beantworten: Wie könnte die Behebungszeit verbessert werden? Als Gedankenexperiment: Wie hättest du die Zeit halbieren können? | Die Wiederherstellung erfolgte im Rahmen einer dreiteiligen Reaktion:
|
Zeitlicher Ablauf | Gib den genauen zeitlichen Ablauf des Vorfalls in chronologischer Reihenfolge mit Zeitstempeln und Zeitzonen an. Berücksichtige dabei mögliche Ereignisse im Vorfeld, den Beginn der Auswirkungen, den Zeitpunkt der Erkennung, Eskalationen, Entscheidungen, Änderungen und das Ende der Auswirkungen. | Alle Zeitangaben sind in UTC. 11:48 Uhr: Control-Plane-Upgrade auf K8S 1.9 fertiggestellt12:46 Uhr: Goliath-Upgrade auf v1.9 fertiggestellt, einschließlich der automatischen Clusterskalierung und der BuildEng-Planungsinstanz 14:20 Uhr: Build Engineering meldet ein Problem an KITT Disturbed. 14:27 Uhr: KITT Disturbed beginnt mit der Untersuchung von Fehlern bei einer bestimmten EC2-Instanz (ip-203-153-8-204). 14:42 Uhr: KITT Disturbed isoliert den Knoten. 14:49 Uhr: BuildEng meldet, dass mehrere Knoten von dem Problem betroffen sind. 86 Vorkommen des Problems zeigen, dass die Fehler weiter im System verbreitet sind. 15:00 Uhr: KITT Disturbed schlägt einen Wechsel zur Standardplanungslösung vor. 15:34 Uhr: BuildEng meldet den Ausfall von 300 Pods. 16:00 Uhr: BuildEng beendet alle fehlgeschlagenen Builds mit OutOfCpu-Berichten. 16:13 Uhr: BuildEng meldet, dass die Fehler bei neuen Builds konsistent erneut auftreten und nicht nur vorübergehend waren. 16:30 Uhr: KITT erkennt die Fehler als Vorfall an und behandelt sie ab sofort entsprechend. 16:36 Uhr: KITT deaktiviert das Escalator-System für die automatische Skalierung, damit es keine weiteren Rechenressourcen zur Minderung des Problems beansprucht. 16:40 Uhr: KITT bestätigt, dass ASG stabil ist, die Clusterlast sich normalisiert hat und die Auswirkungen auf Kunden beseitigt sind. |
5-Why-Methode | Wende die Technik zur Ursachenermittlung an. Beginne bei den Auswirkungen: Frage dich, warum sie aufgetreten sind und weshalb sie sich so geäußert haben. Frage weiter nach dem "Warum", bis du die grundlegende Ursache gefunden hast. Dokumentiere deine Fragen und Antworten hier oder in einem dem Issue angefügten Diagramm. |
|
Grundlegende Ursache | Was war die grundlegende Ursache? Hier muss eine Änderung vorgenommen werden, damit Vorfälle dieser Art nicht mehr auftreten. | Ein Bug bei der Verarbeitung von Verbindungspools in |
Backlog-Überprüfung | Enthält dein Backlog eine Aufgabe, mit der dieser Vorfall hätte verhindert oder deutlich abgemildert werden können? Falls ja, warum wurde sie nicht umgesetzt? Eine ehrliche Bewertung an diesem Punkt hilft, vergangene Entscheidungen über Prioritäten und Risiken zu klären. | An sich nicht. Verbesserungen bei der Typermittlung für Datenströme waren bekannte laufende Aufgaben, für die Rituale vorhanden waren (z. B. "Füge Datenstromtypen hinzu, wenn du eine Datei änderst/erstellst."). Es wurden Tickets für die Problembehebung bei Integrationstests erstellt. Versuche in dieser Richtung waren jedoch nicht erfolgreich. |
Erneutes Auftreten | Ist dieser Vorfall (mit derselben grundlegenden Ursache) schon einmal aufgetreten? Falls ja, wie konnte es zu einer Wiederholung kommen? | Dieselbe grundlegende Ursache hatte bereits die Vorfälle HOT-13432, HOT-14932 und HOT-19452 zur Folge. |
Erkenntnisse | Was haben wir gelernt? Besprich, was gut gelaufen ist, was besser hätte laufen können und wo ihr Verbesserungsmöglichkeiten einfach durch Glück gefunden habt. |
|
Korrekturmaßnahmen | Was wird unternommen, damit Vorfälle dieser Art nicht mehr auftreten? Wer setzt diese Aktionen bis wann um? Erstelle Vorgangsverlinkungen für "Aktionen mit hoher Priorität" zu Vorgängen, mit denen die einzelnen Aktionen verfolgt werden können. |
|
Szenario | Unmittelbare Ursache und Aktion | Grundlegende Ursache | Beseitigung der grundlegenden Ursache |
Das "Red Dawn"-Squad von Stride hatte für seine Services keine Datadog-Überwachungen und Benachrichtigungen eingerichtet oder diese waren nicht richtig konfiguriert. | Die Teammitglieder hatten für neue Services keine Überwachung und keine Benachrichtigungen konfiguriert. Hole dies nach. | Es gibt keinen Prozess zur Einrichtung neuer Services, der auch die Überwachung und Benachrichtigungen beinhaltet. | Erstelle einen Prozess zur Einrichtung neuer Services und vermittle dem Team, dass es diesen Prozess befolgen muss. |
Stride ist in IE11 nicht nutzbar, weil ein Fabric Editor-Upgrade in dieser Browserversion nicht funktioniert. | Upgrade einer Abhängigkeit. Setze das Upgrade zurück. | Die Kompatibilität wird nicht browserübergreifend getestet. | Richte automatische kontinuierliche Tests für die browserübergreifende Kompatibilität ein. |
Protokolle von Micros EU erreichten den Protokollierungsservice nicht. | Die Rolle, die Micros zum Senden von Protokollen erhalten hatte, war falsch. Berichtige die Rolle. | Wir erfahren es nicht, wenn die Protokollierung bei einer Umgebung nicht funktioniert. | Füge Überwachungs- und Benachrichtigungsfunktionen für fehlende Protokolle aus allen Umgebungen hinzu. |
Ausgelöst durch einen vorangegangenen AWS-Vorfall lasteten die Confluence Vertigo-Knoten ihren Verbindungspool zu Media zu stark aus, wodurch es für Kunden zu vorübergehenden Fehlern bei Anhängen und Medien kam. | AWS-Fehler. Sieh dir die Ergebnisse der AWS-Nachbereitung an. | Ein Bug bei der Verarbeitung von Verbindungspools in Confluence führte zu Verbindungslecks bei Fehlerbedingungen. Außerdem war der Verbindungsstatus nicht mehr transparent. | Behebe den Bug und füge Überwachungsfunktionen hinzu, mit denen ähnliche Situationen künftig erkannt werden, bevor sie sich auswirken. |
Kategorie | Definitionen | Was sollte unternommen werden? |
Bug | Eine von Atlassian vorgenommene Codeänderung (eine bestimmte Art von Änderung) | Führe Tests durch. Führe Canary-Tests durch. Nimm inkrementelle Rollouts vor und beobachte diese. Nutze Feature Flags. Sprich mit dem für die Qualitätssicherung zuständigen Engineer. |
Änderung | Eine von Atlassian vorgenommene Änderung (jedoch keine Codeänderung) | Verbessere deine Vorgehensweise bei Änderungen, beispielsweise die Reviews für Änderungen oder die Prozesse beim Änderungsmanagement. Alle unter "Bug" genannten Punkte gelten auch hier. |
Skalierung | Mangelnde Skalierung (z. B. wegen unbemerkter Ressourceneinschränkungen oder mangelnder Kapazitätsplanung) | What are your service's resource constraints? Are they monitored and alerted? If you don't have a capacity plan, make one. If you do have one, what new constraint do you need to factor in? |
Architektur | Diskrepanz zwischen Design und Betriebsbedingungen | Überprüfe das Design. Solltest du die Plattform wechseln? |
Abhängigkeit | Fehler beim Service eines Drittanbieters (d. h. nicht bei Atlassian) | Managst du das Risiko von Fehlern bei Drittanbietern? Hat sich das Unternehmen entschieden, Risiken zu akzeptieren, oder sind Maßnahmen zur Risikominderung erforderlich? Siehe "Grundlegende Ursachen im Zusammenhang mit Abhängigkeiten" unten. |
Unbekannt | Nicht zu ermitteln (die Aktion besteht in der Erweiterung der Diagnosemöglichkeiten) | Verbessere die Beobachtungsmöglichkeiten für dein System, indem du beispielsweise Funktionen für Protokollierung, Überwachung und Debugging hinzufügst. |
Kategorie | Zu stellende Frage | Beispiele |
Untersuchung dieses Vorfalls | "Welches Ereignis hat diesen Vorfall verursacht und welchen Grund hatte es?" Letztlich geht es darum, die grundlegende Ursache zu ermitteln. | Analyse von Protokollen, Erstellung von Diagrammen zum Anfragepfad, Überprüfung von Heap-Dumps |
Abmilderung dieses Vorfalls | "Welche sofortigen Maßnahmen haben wir ergriffen, um dieses konkrete Ereignis zu erledigen und zu managen?" | Rollbacks, "Cherry Picking", Push-Übertragung von Konfigurationen, Kommunikation mit betroffenen Benutzern |
Behebung von Schäden aus diesem Vorfall | "Wie haben wir unmittelbare oder Kollateralschäden aus diesem Vorfall behoben?" | Wiederherstellung von Daten, Reparatur von Systemen, Entfernung von Umleitungen für den Datenverkehr |
Erkennung künftiger Vorfälle | Wie können wir die zur präzisen Erkennung eines künftigen ähnlichen Vorfalls benötigte Zeit reduzieren? | Überwachung, Benachrichtigung, Plausibilitätsprüfungen für den Input/Output |
Abmilderung künftiger Vorfälle | "Wie können wir den Schweregrad und/oder die Dauer künftiger ähnlicher Vorfälle verringern?" "Wie können wir den von einem Vorfall dieser Art betroffenen Prozentsatz der Benutzer beim nächsten Mal reduzieren?" | Geplante Leistungsminderung, Verwerfen nicht kritischer Ergebnisse, Fail-Open, Optimierung der aktuellen Verfahren mit Dashboards/Playbooks, Änderungen an den Prozessen zum Umgang mit Vorfällen |
Verhinderung künftiger Vorfälle | "Wie können wir verhindern, dass ein Fehler dieser Art erneut auftritt?" | Stabilitätsverbesserungen für die Codebasis, gründlichere Unit-Tests, Input-Validierung und Robustheit gegenüber Fehlerbedingungen, Bereitstellungsänderungen |
Auch beim Formulieren unserer Nachbereitungsaktionen halten wir uns an die Ratschläge von Lueder und Beyer.
Formulieren von Nachbereitungsaktionen
Die Formulierung kann darüber entscheiden, ob eine Nachbereitungsaktion schnell und leicht umgesetzt oder aufgrund mangelnder Umsetzbarkeit oder andauerndem Aufschieben immer weiter hinausgezögert wird. Eine sorgfältig ausgearbeitete Nachbereitungsaktion sollte folgende Eigenschaften aufweisen:
Umsetzbar: Formuliere jede Aktion als Satz, an dessen Anfang ein Verb steht. Die Aktion sollte zu einem nützlichen Ergebnis führen, nicht zu einem Prozess. Beispiel: "Erstelle eine Liste der kritischen Abhängigkeiten" ist eine gut formulierte Aktion, "Untersuche die Abhängigkeiten" dagegen nicht.
Konkret: Grenze den Umfang der einzelnen Aktionen so eng wie möglich ein. Stelle klar, was Teil der Aufgabe ist und was nicht.
Begrenzt: Gib zu jeder Aktion an, wann sie als fertig umgesetzt gilt, statt das Ende offen zu lassen oder fortlaufende Aktionen vorzugeben.
Nicht gut | Besser |
Untersuche die Überwachung für dieses Szenario. | (Umsetzbar) Füge Benachrichtigungsfunktionen für alle Fälle hinzu, in denen dieser Service > 1 % Fehler zurückgibt. |
Behebe den Fehler, der den Ausfall verursacht hat. | (Konkret) Sorge dafür, dass ungültige Angaben zur Postleitzahl in Benutzeradressformularen sicher verarbeitet werden. |
Bitte den Engineer, vor dem Aktualisieren zu überprüfen, ob das Datenbankschema geparst werden kann. | (Begrenzt) Füge für Schemaänderungen eine automatische Prüfung vor der Übermittlung hinzu. |
Einrichten eines Bereitschaftsplans mit Opsgenie
In diesem Tutorial erfährst du, wie du einen Bereitschaftsplan einrichtest, Regeln für Außerkraftsetzungen anwendest, Bereitschaftsbenachrichtigungen konfigurierst und vieles mehr – und das alles in Opsgenie.
Dieses Tutorial ansehenInformationen zur Kommunikation bei Vorfällen mit Statuspage
In diesem Tutorial zeigen wir dir, wie du mithilfe von Vorfallvorlagen bei Ausfällen effektiv kommunizierst. Sie sind an viele Arten von Serviceunterbrechungen anpassbar.
Dieses Tutorial ansehen