Gestione degli imprevisti per i team high velocity
Analisi post mortem degli imprevisti
In Atlassian, adottiamo la prassi delle analisi post mortem senza biasimi per assicurarci di comprendere e correggere la causa di ogni imprevisto con un livello di gravità 2 o superiore. Ecco una sintesi della nostra documentazione interna, che descrive in che modo svolgiamo le analisi post mortem in Atlassian.
Scarica il manuale in formato cartaceo o PDF
Abbiamo una fornitura limitata di versioni cartacee del nostro Manuale sulla gestione degli imprevisti che spediamo gratuitamente. In alternativa, puoi scaricare una versione PDF.
Campo | Istruzioni | Esempio |
Riepilogo dell'imprevisto | Riassumere l'imprevisto in poche frasi. Includere il livello di gravità, il perché e la durata dell'impatto. | Tra le L'evento è stato rilevato dal Questo imprevisto di Sono stati aperti |
Avvisaglie | Descrivere le circostanze che hanno portato all'imprevisto, ad esempio le modifiche precedenti che hanno introdotto bug latenti. | Alle |
Guasto | Descrivere cosa non ha funzionato come previsto. Allegare schermate di grafici o dati pertinenti che mostrino l'errore. | |
Impatto | Descrivere cosa hanno notato i clienti interni ed esterni durante l'evento imprevisto. Includere quanti casi di supporto sono stati aperti. | Per La circostanza ha interessato Sono stati aperti |
Rilevamento | Come e quando Atlassian ha rilevato l'imprevisto? Come è possibile migliorare il tempo di rilevamento? Per esercizio mentale, come avremmo potuto dimezzare il tempo di mitigazione? | Il rilevamento dell'imprevisto è avvenuto quando si è attivato il Verrà impostato un |
Risposta | Chi ha risposto, quando e come? Ci sono stati ritardi o impedimenti alla nostra risposta? | Dopo essere stato contattato alle 14:34 UTC, il tecnico KITT si è collegato online alle 14:38 nella chat dell'imprevisto. Tuttavia, il tecnico di turno non aveva sufficiente esperienza sul servizio automatico di scalabilità Escalator, quindi alle 14:50 è stato inviato un successivo avviso che ha attivato e coinvolto un tecnico KITT senior alle 14:58. |
Ripristino | Descrivere come e quando il servizio è stato ripristinato. Come si è capito in che modo arginare l'impatto? Ulteriori domande da porre, a seconda dello scenario: in che modo è possibile migliorare il tempo di mitigazione? Per esercizio mentale, come avremmo potuto dimezzare il tempo di mitigazione? | Il ripristino è consistito in una triplice risposta:
|
Timeline | Fornire una sequenza temporale dettagliata dell'imprevisto, in ordine cronologico e con marcature orarie riferite a uno o più fusi orari. Includere: eventuali avvisaglie; inizio dell'impatto; ora di rilevamento; escalation, decisioni e modifiche; e fine dell'impatto. | Tutti gli orari sono UTC. 11:48 - Aggiornamento K8S 1.9 del piano di controllo terminato12:46 - Aggiornamento Goliath a V1.9 completato, incluso servizio automatico di scalabilità del cluster e istanza programma di pianificazione BuildEng 14:20 - Build Engineering segnala un problema a KITT Disturbed 14:27 - KITT Disturbed inizia a indagare errori di un'istanza EC2 specifica (ip-203-153-8-204) 14:42 - KITT Disturbed blocca il nodo specifico 14:49 - BuildEng segnala che il problema interessa più di un singolo nodo. 86 istanze del problema indicano che gli errori sono più sistematici 15:00 - KITT Disturbed suggerisce di passare al programma di pianificazione standard 15:34 - BuildEng riporta errori in 300 pod 16:00 - BuildEng esegue il kill di tutte le build in errore con rapporti di OutOfCpu 16:13 - BuildEng segnala che gli errori persistono con le nuove build e non sono semplicemente transitori. 16:30 - KITT riconosce gli errori come imprevisto e li gestisce di conseguenza. 16:36 - KITT disattiva il servizio automatico di scalabilità Escalator per evitare che esso rimuova risorse di elaborazione per limitare il problema. 16:40 - KITT conferma che ASG è stabile, il carico del cluster è normale e l'impatto sui clienti è risolto. |
Cinque perché | Utilizzare la tecnica di identificazione della causa primaria. Iniziare con l'impatto e chiedersi perché sia avvenuto e perché abbia prodotto i danni rilevati. Continuare a chiedere perché fino ad arrivare alla causa primaria. Documentare i "perché" come nell'elenco riportato o in un diagramma allegato alla issue. |
|
Causa radice | Qual è stata la causa primaria? Si tratta di ciò che deve cambiare per impedire che questa categoria di imprevisto si ripresenti. | Un bug nella gestione del pool di connessione a |
Controllo del backlog | Vi sono sviluppi in backlog che avrebbero potuto evitare l'imprevisto o ridurne notevolmente l'impatto? Se sì, perché non sono stati implementati? Una valutazione onesta aiuta a chiarire le passate decisioni in merito a priorità e rischi. | Non in senso specifico. I miglioramenti alla tipizzazione del flusso erano task noti in via di sviluppo con proprie procedure già stabilite (ad es. aggiungere tipi di flusso per la modifica/creazione di un file). I ticket per la sistemazione dei test di integrazione erano stati aperti ma i tentativi non hanno avuto successo. |
Ricorrenza | Questo imprevisto (con la stessa causa primaria) si era già verificato? Se sì, perché si è ripetuto? | Questa stessa causa primaria ha causato gli imprevisti HOT-13432, HOT-14932 e HOT-19452. |
Lezioni apprese | Che cosa abbiamo imparato? Dibattere cosa ha funzionato, cosa avrebbe potuto funzionare meglio e dove abbiamo avuto fortuna in modo da trovare le opportunità di miglioramento. |
|
Azioni correttive | Cosa faremo per assicurarci che questa categoria di imprevisti non si ripeta? Chi intraprenderà le azioni ed entro quando? Creare link di "Azione prioritaria" ai ticket per monitorare ciascuna azione. |
|
Scenario | Causa immediata e azione | Causa radice | Mitigazione della causa primaria |
I servizi dello Squad "Red Dawn" di Stride non disponevano di monitoraggio Datadog e avvisi su chiamata oppure non erano configurati correttamente. | I membri del team non avevano configurato il monitoraggio e l'invio di segnalazioni per i nuovi servizi. Assicurarsi di configurarli per questi servizi. | Non vi è un processo definito per avviare nuovi servizi, che includa monitoraggio e segnalazioni. | Creare un processo per avviare i nuovi servizi e addestrare il team a seguirlo. |
Stride è inutilizzabile su IE11 a causa di un aggiornamento a Fabric Editor che non funziona con questa versione del browser. | Aggiornamento di una dipendenza. Ripristinare l'aggiornamento precedente. | Mancanza di test di compatibilità su tutti i browser. | Automatizzare test permanenti di compatibilità su tutti i browser. |
I log di Micros EU non raggiungevano il servizio di registrazione eventi. | Il ruolo attribuito a Micros per inviare i log era errato. Correggere il ruolo. | Non è possibile sapere quando la registrazione eventi da un ambiente non funziona. | Aggiungere monitoraggio e segnalazioni sui log mancanti per qualsiasi ambiente. |
Innescati da un precedente imprevisto di AWS, i nodi Confluence Vertigo hanno esaurito il proprio pool di connessioni a Media, causando ai clienti errori intermittenti su allegati e documenti multimediali. | Errore AWS. Recuperare l'analisi post mortem di AWS. | Un bug nella gestione del pool di connessioni Confluence ha determinato connessioni in condizioni di errore, associate a mancanza di visibilità sullo stato della connessione. | Correggere il bug e aggiungere il monitoraggio che può rilevare situazioni future simili prima che abbiano un impatto. |
Categoria | Definizione | Cosa occorre fare al riguardo? |
Bug | Una modifica al codice effettuata da Atlassian (questo è un tipo specifico di modifica) | testa Canary. Effettuare implementazioni incrementali e osservare il loro andamento. Utilizzare flag di funzionalità. Confrontarsi con il proprio tecnico della qualità. |
Modifica | Una modifica effettuata da Atlassian (che non riguardi il codice) | Migliorare il modo in cui si eseguono le modifiche, ad esempio le revisioni delle modifiche o i processi di gestione delle modifiche. Tutte le osservazioni fatte per un "bug" valgono anche in questo caso. |
Amplia | Difetti di scalabilità (ad esempio, ignoranza dei limiti delle risorse o assenza di pianificazione della capacità) | 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? |
Architettura | Disallineamento della progettazione rispetto alle condizioni operative | Controllare la progettazione. Occorre cambiare piattaforma? |
Dipendenza | Errore di un servizio di terze parti (non di Atlassian) | Si sta gestendo il rischio di errori o guasti di terze parti? È stata presa la decisione aziendale di accettare un rischio o è necessario adottare misure di contenimento? Vedere "Cause primarie con dipendenze" qui di seguito. |
Sconosciuto | Non determinabile (l'azione è aumentare la capacità diagnostica) | Migliorare l'osservabilità del sistema aggiungendo funzioni di log, monitoraggio, debug e simili. |
Categoria | Domanda da porsi | Esempi |
Indagare sull'imprevisto | "Cosa ha causato questo imprevisto e perché?" L'obiettivo finale è determinare le cause primarie. | Analisi dei log, diagrammi del percorso della richiesta, riesame dei dump dell'heap |
Mitigare l'imprevisto | "Quali azioni immediate abbiamo intrapreso per risolvere e gestire questo specifico evento ?" | Ripristino, scelte selettive, push di configurazioni, comunicazione con gli utenti interessati |
Riparare i danni derivanti dall'imprevisto | "Come abbiamo risolto i danni immediati o collaterali provocati da questo imprevisto?" | Ripristino dei dati, riparazione delle macchine, rimozione di reindirizzamenti di traffico |
Rilevare imprevisti futuri | "Come possiamo ridurre il tempo necessario a rilevare con precisione un simile errore?" | Monitoraggio, segnalazioni, verifiche di plausibilità su input/output |
Mitigare imprevisti futuri | "Come possiamo ridurre la gravità e/o la durata di simili imprevisti futuri?" "La prossima volta, come possiamo ridurre la percentuale di utenti interessati da questa categoria di malfunzionamenti?" | Degradazione progressiva, perdita di risultati non critici, errori di apertura, intensificazione delle prassi attuali con dashboard o playbook, modifiche al processo degli imprevisti |
Prevenire imprevisti futuri | "Come possiamo evitare il ripetersi di questo tipo di malfunzionamento?" | Miglioramenti della stabilità nel codice di base, test unitari più approfonditi, convalida dell'input e robustezza rispetto all condizioni di errore, modifiche al provisioning |
Inoltre, utilizziamo i consigli di Lueder e Beyer su come formulare le nostre azioni post mortem.
Formulazione di azioni post mortem:
La corretta formulazione di un'azione post mortem può fare la differenza tra una facile conclusione e un ritardo indefinito dovuto a impraticabilità o procrastinazione. Un'azione post mortem ben progettata deve avere le seguenti proprietà ed essere:
Realizzabile: formula ogni azione come una frase che inizia con un verbo. L'azione deve tradursi in un risultato utile, non in un processo. Ad esempio, "Enumerare l'elenco delle dipendenze critiche" è una buona azione, mentre "Effettuare un indagine sulle dipendenze" non lo è.
Specifica: definisci l'ambito di ciascuna azione nel modo più restrittivo possibile, chiarendo cosa è incluso e cosa non è incluso nel lavoro.
Circoscritta: esprimi ogni azione indicando come poter capire quando è finita, piuttosto che lasciarla aperta o in corso.
Da... | A... |
Indagare il monitoraggio per questo scenario. | (Azione realizzabile) Aggiungere segnalazioni per tutti i casi in cui questo servizio restituisce >1% di errori. |
Risolvere il problema che ha causato l'interruzione del servizio. | (Azione specifica) Gestire in modo sicuro il codice postale non valido nel modulo di immissione degli indirizzi utente. |
Assicurarsi che il tecnico verifichi che lo schema del database possa essere analizzato prima dell'aggiornamento. | (Azione circoscritta) Aggiungere un controllo automatico prima dell'invio per le modifiche dello schema. |
Configurare una On-call Schedule con Opsgenie
In questo tutorial imparerai come configurare una On-call Schedule, applicare le regole di sostituzione, configurare le notifiche su chiamata e molto altro, il tutto in Opsgenie.
Segui il tutorialScopri di più sulla comunicazione degli imprevisti con Statuspage
In questo tutorial ti mostreremo come utilizzare i modelli di imprevisto per comunicare in modo efficace durante le interruzioni. Puoi adattarlo a molti tipi di interruzione del servizio.
Segui il tutorial