Blog ·
Een incident dat nooit sluit op stilte
Een monitoringincident hoort te openen op een meting en te sluiten op een meting. Dit breekt er zodra het uitblijven van data mag gelden als goed nieuws.
Door Provibr
Elk monitoringsysteem komt uiteindelijk voor dezelfde vraag te staan, telkens in een iets ander kostuum: wat doe je als de metingen wegblijven?
Het verleidelijke antwoord is het als herstel te behandelen. Er faalt niets meer, de rode rij verdwijnt, het dashboard is rustig. Het is ook de duurste leugen die het systeem kan vertellen, want het moment waarop je niet meer naar iets kunt kijken is precies het moment waarop je niet mag beweren dat het goed gaat.
Dit is het ontwerp waar we voor incidenten op uitkwamen, en het gaat er grotendeels over om "we hebben gemeten dat het stuk is", "we hebben gemeten dat het gemaakt is" en "we kunnen er nu niet naar kijken" als drie afzonderlijke uitspraken te houden die nooit stilletjes in elkaar overgaan.
Waarom het incident een object is
Daarvoor was een storing een reeks rijen in een tabel met toestandsovergangen. Dat is genoeg om een grafiek te tekenen en niet genoeg om iets te zeggen. Drie dingen bestaan pas zodra er een object is.
Een duur. De herstelmelding droeg voorheen helemaal geen duur, want er was niets om de parameter mee te vullen. Een incident heeft een begin, dus de duur is een meting en geen inschatting.
Een menselijke laag. Bevestigen, toewijzen en met de hand sluiten zijn dingen die mensen doen, en ze mogen de gemeten toestand niet raken. Een kolom acknowledged_at op een meting zou precies de lijn vervagen waar deze hele functie op gebouwd is.
Ontdubbeling over de tijd. Eén melding wanneer het opent, herinneringen op hun eigen klok, hooguit één escalatie. Zonder object is er niets om "dat heb ik je al verteld" aan op te hangen, en dan is elke tik weer een kans om het je opnieuw te vertellen.
De ontdubbeling is een index
De uniciteit die verhindert dat er twee incidenten bestaan voor één regel is een partiële unieke index op de regel, waar het tijdstip van afsluiting null is. Twee gateways die dezelfde overgang verwerken leveren per constructie één incident op; de tweede krijgt een uniciteitsschending en gaat door.
Code die eerst kijkt of er al een bestaat en daarna invoegt, bestaat uit twee statements, en dat zijn twee kansen dat er iets tussenkomt. Dit is dezelfde vorm als de slotindex van de scheduler en de bezettingsindex van de racks elders in dit product, en om dezelfde reden.
Er zat hier ook een oprecht gênante fout, de moeite waard om op te schrijven omdat hij in een review onzichtbaar is. De ontdubbelingssleutel voor de melding was opgebouwd uit de regel, de nieuwe toestand en het huidige tijdstip. Een sleutel die het huidige tijdstip bevat ontdubbelt per constructie niets, en hij ziet er op het scherm volkomen redelijk uit. Hij is nu de identificatie van het incident. Achteraf gemeten: drie opeenvolgende mislukkingen leveren één incident en één melding op, en nog eens drie veranderen daar niets aan.
Drie manieren waarop een incident kan eindigen, en maar één is een meting
| Afsluiting | Wat het beweert | Wat er samen met de afsluiting wordt vastgelegd |
|---|---|---|
recovered | we hebben opnieuw een gezonde toestand gemeten | het resultaat dat het sloot, bewaard op de tijdlijn |
configuration_retired | de regel die dit opende meet niet meer | geen, en er wordt er ook geen beweerd |
manual | een mens heeft het gesloten | wie, en eventueel waarom |
De middelste is waar deze lijst om bestaat. Een regel die vervangen wordt door een nieuwe sjabloonversie moet zijn open incidenten sluiten, en dat moet zonder een onware herstelmeting. Was de enige beschikbare afsluiting recovered, dan zou het vervangen van een sjabloon stilletjes "dit kwam weer online" schrijven in de geschiedenis van elke dienst die op dat moment plat lag.
Er is bewust geen afsluiting stale. Dat de metingen wegbleven zegt niets over het doel.
Welke overgangen een incident überhaupt raken
Een incident hangt aan een uitspraak over het doel. Een overgang naar "source unavailable", wat betekent dat onze eigen agent verdwenen is, opent dus niets, en, belangrijker nog, sluit niets. Als een vertrekkende agent een incident kon sluiten, zou een lopende storing uit beeld verdwijnen op precies het moment waarop we het vermogen verloren om te kijken.
Een overgang naar "configuration error" gedraagt zich hetzelfde: de regel beschrijft niets meetbaars meer, en dat is een uitspraak over ons en niet over de dienst.
"Degraded" sluit een incident wél. De dienst antwoordt, de toestand telt als gezond, alleen de latentie is hoog. Hem open laten zou van een trage dienst een permanent openstaande storing maken, herinneringen inbegrepen.
Daaronder ligt, uit een eerdere ronde, een hard onderscheid tussen een onbereikbare bron en een doel dat plat ligt. Een controle waarvan de agent niet verbonden is levert "source unavailable" op en nooit "down". Alles hierboven is diezelfde regel, één laag hoger.
Onderhoud dempt meldingen en blijft meten
Een onderhoudsvenster onderdrukt meldingen. Het onderdrukt geen metingen. Het incident opent gewoon, de tijdlijn loopt gewoon door, en alleen het bericht blijft in de lade staan.
Dat is geen detail. De vraag die mensen na een onderhoudsvenster stellen is "was het op tijd terug", en die vraag is onbeantwoordbaar als je bent gestopt met meten terwijl het ertoe deed. Er is een apart, expliciet vinkje dat de controles wél pauzeert, en dat staat standaard uit; daarmee slaat de scheduler het claimen van het slot over, dus er wordt niets opeisbaar en er wordt niets gemist. Wat er daarna overblijft is één gatmarkering, hetzelfde als bij elk ander gat. Er is geen inhaalslag.
Het venster zelf wordt opgeslagen als een absoluut interval met een IANA-tijdzone ernaast. De klant voert kloktijd in en wil die als dezelfde kloktijd kunnen teruglezen, ook al rendert het paneel in een vaste zone. Kloktijd plus zone opslaan zou elke lezer, de scheduler, de verwerking en het scherm evengoed, dwingen de omrekening opnieuw te doen, en dan is een overgang naar zomertijd een uur onenigheid tussen twee van hen.
Waar twee vensters overlappen wint het venster dat de controles pauzeert. Heeft een klant ergens expliciet een strengere keuze gemaakt, dan is dat de keuze die je eert.
Herinneringen, escalatie en de volgorde van twee uitspraken
Zowel het herinneringsinterval als de escalatievertraging staan op de regelversie en niet op het incident, want het is configuratie en configuratie hoort bij de versie die haar vastlegde. Wijzig het beleid tijdens een storing en het lopende incident blijft onder het beleid waaronder het opende.
Allebei staan ze standaard uit. Een standaardwaarde die mensen 's nachts wakker maakt is een beslissing die de klant niet genomen heeft.
Bevestigen legt de herinneringen stil, en dat is de volledige functie van bevestigen. Iemand die zegt "ik kijk ernaar" hoort niet om de paar minuten onderbroken te worden. De herstelmelding komt nog steeds, want dat is het antwoord op de vraag waar hij naar keek. De herinneringsklok loopt bovendien vanaf de laatste herinnering en niet vanaf het begin, zodat een worker die na een uur zijn achterstand inhaalt niet twaalf herinneringen tegelijk aflevert.
De worker schrijft eerst het tijdstip en verstuurt daarna het bericht, en de bijwerking eist dat de toestand nog is wat hij las. Verliest hij die race, dan gebeurt hier niets. In de andere volgorde levert een verloren race een bericht op waarvan geen spoor bestaat, en dan komt het bericht de volgende ronde nog eens.
Escalatie gebeurt hooguit één keer per incident, en de controle daarop staat in de gedeelde regel en niet in de worker. Zonder die controle zou elke passage weer een escalatiegebeurtenis schrijven zolang de storing duurde: dertig per uur bij een ritme van twee minuten.
Flapping is de uitzondering, en het wordt beslist wanneer het incident opent: drie incidenten op dezelfde regel binnen een uur. Een flappende controle heeft per definitie nooit een incident dat lang openstaat, dus elke escalatie op tijdsbasis mist hem voor altijd. Drie en niet twee, want twee keer is pech en een drempel van twee zou elke gewone herstart van een dienst flapping noemen. Een uur en geen dag, want drie storingen verspreid over een werkdag zijn drie storingen.
De duur is een getal en een eenheid
De herstelmelding draagt hoe lang het duurde, als een waarde en een eenheid, nooit als een zin. Zou de worker zelf "1 hour 12 minutes" samenstellen, dan zou dat Engelse fragment midden in een vertaalde zin in acht andere talen staan. Wat er in plaats daarvan meereist is een eenheid waar de vertaling op selecteert, met een meervoud binnen elke tak.
Eén eenheid, geen samenstellingen: een samenstelling heeft een scheidingsteken en een volgorde nodig, en die verschillen per taal. Seconden onder een minuut, minuten tot twee uur, uren tot twee dagen, daarna dagen. Negentig minuten leest scherper dan twee uur, en naar boven afronden zou een storing van 89 minuten twee uur laten duren.
Twee eerlijke gevolgen die we niet hebben opgelost
Down, hersteld en herinnering delen één groepssleutel voor meldingen, want een herinnering is letterlijk hetzelfde onderwerp opnieuw en hoort de bestaande rij bij te werken in plaats van er telkens als de klok afgaat een toe te voegen. De prijs is dat een herinnering een rij bijwerkt die iemand al gelezen heeft, en daardoor voor hem onzichtbaar is. Escalatie krijgt precies daarom een eigen groep: het bericht dat het hardst moet aankomen mag niet het bericht zijn dat als eerste wordt overschreven. Monitoringmeldingen gaan vandaag niet per e-mail de deur uit.
Wat wij zouden opschrijven
- Laat het uitblijven van data nooit iets sluiten. Geef "we kunnen er niet naar kijken" een eigen toestand en zorg dat die een incident opent noch sluit.
- Geef het incident een object zodra je een duur, een bevestiging of een tweede bericht over hetzelfde ding wilt.
- Zet de ontdubbeling in een unieke index, en controleer of je meldingssleutel niet de huidige tijd bevat.
- Som op hoe een incident kan eindigen, en eis alleen bewijs waar bewijs beweerd wordt.
- Onderdruk meldingen tijdens onderhoud, geen metingen, en maak van het pauzeren van de controles een aparte, expliciete keuze die standaard uit staat.
- Werk de toestand bij en verstuur dan het bericht. De andere volgorde verliest berichten stilzwijgend.
Dit werk zit achter een uitrolvlag die standaard uit staat, dus niets hiervan is iets dat je vandaag kunt kopen. Het is opgeschreven als methode en niet als aankondiging. De meetlaag eronder, inclusief waarom een onbereikbare agent geen falende dienst is, is een apart verhaal, en de nauw verwante vraag wanneer een platform überhaupt een tijd mag noemen staat in een voortgangsbalk die weigert te gokken.
Uit het platformwerk bij Provibr.