Blog ·
Un incident care nu se închide pe tăcere
Un incident de monitorizare ar trebui să se deschidă și să se închidă pe o măsurătoare. Iată ce se strică atunci când absența datelor trece drept veste bună.
De Provibr
Orice sistem de monitorizare ajunge până la urmă în fața aceleiași întrebări, îmbrăcată puțin altfel: ce faceți când măsurătorile încetează să sosească?
Răspunsul tentant este să o tratați drept revenire. Nimic nu mai eșuează, rândul roșu dispare, tabloul de bord este liniștit. Este totodată cea mai scumpă minciună pe care o poate spune sistemul, pentru că momentul în care nu mai puteți privi ceva este exact momentul în care nu aveți voie să pretindeți că este în regulă.
Acesta este designul la care am ajuns pentru incidente, iar cea mai mare parte a lui este despre a ține „am măsurat că este stricat”, „am măsurat că este reparat” și „nu îl putem vedea acum” drept trei afirmații separate care nu devin niciodată, pe tăcute, una alta.
De ce incidentul este un obiect
Înainte de asta, o pană era o serie de rânduri într-un tabel de tranziții de stare. Este de ajuns ca să desenați un grafic și nu este de ajuns ca să spuneți ceva. Trei lucruri există abia atunci când există un obiect.
O durată. Mesajul de revenire nu purta deloc o durată, pentru că nu exista nimic cu care să se umple parametrul. Un incident are un început, așa că durata este o măsurătoare și nu o estimare.
Un strat uman. Confirmarea, atribuirea și închiderea manuală sunt lucruri pe care le fac oamenii, iar ele nu au voie să atingă starea măsurată. O coloană acknowledged_at pe o măsurătoare ar estompa exact linia pe care este construită întreaga funcționalitate.
Deduplicare în timp. O notificare la deschidere, reamintiri pe propriul lor ceas, cel mult o escaladare. Fără un obiect nu există de ce să atârnați „v-am spus deja”, iar atunci fiecare tact este încă o ocazie de a vă spune din nou.
Deduplicarea este un indice
Unicitatea care împiedică existența a două incidente pentru o singură regulă este un indice unic parțial pe regulă, acolo unde momentul rezolvării este null. Două gateway-uri care procesează aceeași tranziție produc un singur incident prin construcție; al doilea primește o încălcare de unicitate și merge mai departe.
Codul care verifică dacă există deja unul și apoi inserează înseamnă două instrucțiuni, adică două ocazii ca ceva să se strecoare între ele. Aceasta este aceeași formă ca indicele de slot al planificatorului și ca indicele de ocupare a rackului din alte părți ale acestui produs, și din același motiv.
A existat aici și un defect sincer jenant, care merită scris pentru că este invizibil la revizuire. Cheia de deduplicare a notificării era construită din regulă, din starea nouă și din momentul curent. O cheie care conține momentul curent nu deduplică nimic, prin construcție, și arată perfect rezonabil pe ecran. Acum ea este identificatorul incidentului. Măsurat după aceea: trei eșecuri consecutive produc un incident și o notificare, iar încă trei nu schimbă nimic.
Trei feluri în care se poate încheia un incident, și numai unul este o măsurătoare
| Rezolvare | Ce pretinde | Ce se consemnează odată cu ea |
|---|---|---|
recovered | am măsurat din nou o stare sănătoasă | rezultatul care l-a închis, stocat pe cronologie |
configuration_retired | regula care l-a deschis nu mai măsoară | niciuna, și nici nu se pretinde vreuna |
manual | o persoană l-a închis | cine și, opțional, de ce |
Cel din mijloc este rostul listei. O regulă care este înlocuită de o revizie de șablon trebuie să își închidă incidentele deschise și trebuie să facă asta fără o măsurătoare falsă de revenire. Dacă singura rezolvare disponibilă ar fi recovered, înlocuirea unui șablon ar scrie în tăcere „acesta și-a revenit” în istoricul fiecărui serviciu care era căzut la acel moment.
În mod deliberat nu există nicio rezolvare stale. Faptul că măsurătorile au încetat să sosească nu spune nimic despre țintă.
Ce tranziții ating de fapt un incident
Un incident atârnă de o afirmație despre țintă. Așa că o tranziție în „sursă indisponibilă”, adică propriul nostru agent a dispărut, nu deschide nimic și, mai important, nu închide nimic. Dacă un agent care pleacă ar putea închide un incident, o pană în desfășurare ar dispărea din câmpul vizual exact în momentul în care am pierdut capacitatea de a o privi.
O tranziție în „eroare de configurare” se poartă la fel: regula nu mai descrie nimic măsurabil, ceea ce este o afirmație despre noi, nu despre serviciu.
„Degradat” chiar închide un incident. Serviciul răspunde, condiția se numără drept sănătoasă, doar latența este mare. Dacă l-am lăsa deschis, un serviciu lent ar fi o pană permanent deschisă, cu reamintiri cu tot.
Sub toate acestea, dintr-o rundă anterioară, stă o distincție dură între o sursă inaccesibilă și o țintă căzută. O verificare al cărei agent nu este conectat produce „sursă indisponibilă” și niciodată „căzut”. Tot ce este mai sus este aceeași regulă, cu un nivel mai sus.
Mentenanța amuțește notificările și continuă să măsoare
O fereastră de mentenanță suprimă notificările. Nu suprimă măsurarea. Incidentul se deschide în continuare, cronologia rulează în continuare, și doar mesajul rămâne în sertar.
Acesta nu este un detaliu. Întrebarea pe care o pun oamenii după o fereastră de mentenanță este „a revenit la timp”, iar la acea întrebare nu se poate răspunde dacă ați încetat să măsurați tocmai când conta. Există o casetă de bifat separată și explicită care chiar pune verificările în pauză, iar ea este dezactivată implicit; cu ea, planificatorul sare peste revendicarea slotului, așa că nimic nu devine scadent și nimic nu este ratat. Ce rămâne după aceea este un singur marcaj de gol, la fel ca pentru orice alt gol. Nu există nicio recuperare.
Fereastra însăși este stocată ca un interval absolut, cu un fus orar IANA alături. Clientul introduce ora de perete și vrea să o citească înapoi ca aceeași oră de perete, chiar dacă panoul afișează într-un fus fix. Stocarea orei de perete plus fusul ar obliga fiecare cititor, planificator, ingestie și ecran deopotrivă, să refacă conversia, iar atunci o trecere la ora de vară înseamnă o oră de dezacord între doi dintre ei.
Acolo unde două ferestre se suprapun, câștigă cea care pune verificările în pauză. Când un client a făcut undeva o alegere mai strictă în mod explicit, aceea este alegerea de onorat.
Reamintiri, escaladare și ordinea a două instrucțiuni
Atât intervalul de reamintire, cât și întârzierea de escaladare trăiesc pe revizia regulii, nu pe incident, pentru că sunt configurație, iar configurația aparține reviziei care a consemnat-o. Schimbați politica în timpul unei pene, iar incidentul în curs rămâne sub politica sub care s-a deschis.
Amândouă sunt dezactivate implicit. O valoare implicită care trezește oameni noaptea este o decizie pe care clientul nu a luat-o.
Confirmarea amuțește reamintirile, iar aceasta este întreaga funcție a confirmării. Cineva care spune „mă uit la asta” nu ar trebui întrerupt la fiecare câteva minute. Notificarea de revenire sosește în continuare, pentru că ea este răspunsul la întrebarea la care se uita. Ceasul reamintirilor pornește și el de la ultima reamintire, nu de la început, așa că un lucrător care recuperează după o oră nu livrează douăsprezece reamintiri deodată.
Lucrătorul scrie mai întâi momentul de timp și trimite mesajul abia după, iar actualizarea cere ca starea să fie încă cea pe care a citit-o. Dacă pierdeți acea cursă, aici nu se întâmplă nimic. În ordinea inversă, o cursă pierdută produce un mesaj despre care nu există nicio consemnare, iar apoi mesajul sosește din nou la runda următoare.
Escaladarea se întâmplă cel mult o dată pe incident, iar verificarea pentru asta trăiește în regula comună și nu în lucrător. Fără ea, fiecare trecere ar scrie încă un eveniment de escaladare atâta timp cât ar dura pana: treizeci pe oră la o interogare de două minute.
Flappingul este excepția și se decide atunci când incidentul se deschide: trei incidente pe aceeași regulă într-o oră. O verificare cu flapping nu are, prin definiție, niciodată un incident care să rămână deschis mult timp, așa că orice escaladare bazată pe timp o ratează pentru totdeauna. Trei și nu două, pentru că de două ori înseamnă ghinion, iar un prag de două ar numi flapping orice repornire obișnuită de serviciu. O oră și nu o zi, pentru că trei pene întinse pe o zi de lucru sunt trei pene.
Durata este un număr și o unitate
Mesajul de revenire poartă cât a durat, ca valoare și unitate, niciodată ca propoziție. Dacă lucrătorul ar compune singur „1 hour 12 minutes”, acel fragment englezesc ar sta în mijlocul unei propoziții traduse în alte opt limbi. Ce călătorește în schimb este o unitate pe care traducerea o selectează, cu un plural înăuntrul fiecărei ramuri.
O singură unitate, fără compuneri: o compunere are nevoie de un separator și de o ordine, iar acestea diferă de la o limbă la alta. Secunde sub un minut, minute până la două ore, ore până la două zile, zile după aceea. Nouăzeci de minute se citește mai ascuțit decât două ore, iar rotunjirea în sus ar face ca o pană de 89 de minute să dureze două.
Două consecințe sincere pe care nu le-am reparat
Căzut, revenit și reamintirea împart o cheie de grup a notificărilor, pentru că o reamintire este literalmente același subiect din nou și ar trebui să actualizeze rândul existent în loc să adauge unul de fiecare dată când sună ceasul. Costul este că o reamintire actualizează un rând pe care cineva l-a citit deja și, prin urmare, îi rămâne invizibilă. Escaladarea primește propriul ei grup exact din acest motiv: mesajul care trebuie să lovească cel mai tare nu are voie să fie cel suprascris primul. Notificările de monitorizare nu pleacă astăzi prin e-mail.
Ce am scrie noi
- Nu lăsați niciodată absența datelor să închidă ceva. Dați-i lui „nu îl putem vedea” o stare a lui proprie și asigurați-vă că nu deschide și nu închide niciun incident.
- Dați incidentului un obiect de îndată ce vreți o durată, o confirmare sau un al doilea mesaj despre același lucru.
- Puneți deduplicarea într-un indice unic și verificați ca cheia dumneavoastră de notificare să nu conțină ora curentă.
- Enumerați felurile în care se poate încheia un incident și cereți dovadă numai acolo unde se pretinde o dovadă.
- Suprimați notificările în timpul mentenanței, nu măsurătorile, și faceți din punerea verificărilor în pauză o alegere separată, explicită și dezactivată implicit.
- Actualizați starea, apoi trimiteți mesajul. Ordinea inversă pierde mesaje în tăcere.
Această lucrare stă în spatele unui indicator de lansare care este dezactivat implicit, așa că nimic din toate acestea nu se poate cumpăra astăzi. Este consemnată ca metodă și nu ca anunț. Stratul de măsurare de dedesubt, inclusiv de ce un agent inaccesibil nu este un serviciu care eșuează, este o poveste separată, iar întrebarea strâns legată despre când are voie o platformă să enunțe un timp se află în o bară de progres care refuză să ghicească.
Din munca la platformă de la Provibr.