Grinden som "låg nere" utan att ligga nere

Postmortem. Händelser 3 och 4 oktober 2026, utredd och åtgärdad 9 oktober 2026. Skriven av den som byggde och körde systemet.

Vad hände
Tre utgående anrop från kodagenter stoppades med beskedet att klientdata-grinden inte svarade. Grinden svarade; den var bara långsammare än kroken hade tålamod för.
Verkan
Tre anrop blockerade, agenterna stannade och väntade enligt regelboken. Ingen data lämnade huset. Tre falska larm på högsta nivå i SIEM:en.
Grundorsak
Krokens tidsgräns mot grinden var 3 sekunder, satt när grinden bara körde regler. Efter att namnigenkänning lades till tar en stor text upp till 4,6 sekunder. Gränsen sågs aldrig över, och ingen mätte.
Upptäckt
Fem dygn senare, när loggen granskades inför att Kontoret-sidan byggdes. Inte av ett larm.

Tidslinje

NärVad
30 sep 16:01Grinden startar. Den kör sedan oavbrutet i nio dygn (780 098 sekunder uppe när den mäts den 9 oktober), alltså inget krasch- eller omstartsfönster i hela perioden.
3 okt 00:45:06Kroken stoppar ett WebFetch-anrop: "Grinden svarar inte". Nästa sekund ett till. Agenten får beskedet att utgången är stängd som standard och väntar.
4 okt 14:01:21Grinden stoppar ett Bash-anrop från ett bolag med 3 e-postadresser och 6 personnamn i texten. Ett riktigt stopp.
4 okt 14:01:53Trettiotvå sekunder senare stoppar kroken ett Bash-anrop från ett annat bolag: "Grinden svarar inte". I grindens processlogg finns sex BrokenPipeError, vilket är vad som händer när grinden blir klar med en skanning och försöker svara en klient som redan lagt på.
9 okt eftermiddagLoggen granskas inför bygget av Kontoret-sidan. Inga starter av grinden i fönstret, men BrokenPipeError i processloggen. Hypotesen: tidsgräns, inte driftstopp.
9 okt 16:40Mätning mot den körande grinden med namnigenkänning: 2 660 tecken 0,08 s, 26 600 tecken 0,65 s, 79 800 tecken 1,46 s, 200 000 tecken (grindens tak) 4,58 s. Tre samtidiga anrop på 79 800 tecken: 1,9 s. Hypotesen håller: texter nära taket tar längre än 3 sekunder.
9 okt 16:50Åtgärderna nedan driftsatta. Första kaosprovet körs: 9 av 9 steg.

Varför det var ofarligt och ändå ett fel

Kroken är stängd som standard: svarar grinden inte, stoppas anropet. Det är rätt. Ett fel i skyddet ska bli ett stopp, inte ett hål. Men samma regel gjorde felet osynligt. Ett stopp ser ut som att skyddet fungerar, och tre stopp på två dygn drunknade bland de riktiga. Loggen sa "svarar inte" utan att skilja på en död process och en långsam, så ingen hade anledning att titta närmare.

Stängd som standard skyddar data. Den skyddar inte mot att man missförstår sina egna loggar.

Åtgärder, gjorda 9 oktober

ÅtgärdVarförLäge
Tidsgräns 3 till 10 sekunder
grind_krok.py
Dubbla marginalen mot det uppmätta värsta fallet, 4,6 s. Mätningen står som kommentar i koden bredvid siffran, så nästa person ser var den kommer ifrån.Klar
Loggen säger varför
grind_krok.py
"Grinden svarar inte, stoppade Bash (tidsgräns)" eller "(nere)". Samma stopp, men nu går det att se skillnad utan att läsa processloggar.Klar
Kaosprov varje natt 04:30
kaosprov.py, launchd
Dödar grinden på riktigt, visar att kroken nekar medan den är nere, väntar in att launchd startar om den, provar att personuppgifter stoppas och ren text släpps, slår på och släpper nödstoppet, och ser att händelsen når SIEM:en. Nio steg. Faller ett går det till mobilen. Resultatet publiceras på Kontoret.Klar
Räknare som överlever omstart
grind.py
Kaosprovet startar om grinden varje natt. Utan det hade antalet skanningar och stopp nollställts dagligen och siffrorna på Kontoret blivit meningslösa.Klar
Skanningstid mätt och bevakad
grind.py, Prometheus, Grafana, vakter.py
Grinden exponerar skanningstiden som histogram på /metrics. Prometheus räknar p95 och p50, Grafana visar dem, och en vakt i Hub larmar till mobilen när p95 passerar 5 sekunder, halva tidsgränsen. Nästa gång gränsen närmar sig syns det innan den passeras.Klar, samma kväll
SIEM-regel 100162
Wazuh
Kaosprovets planerade stopp och nödstopp får nivå 3 i stället för 12. Annars hade det riktiga larmet "grinden nere" tappat sin betydelse efter en vecka.Klar, 17 av 17 regeltester

Vad som fortfarande saknas

Alla siffror kommer från Hubs händelselogg, grindens processlogg och mätningarna den 9 oktober. Tillbaka till plattformens kontroller.