{"id":23,"date":"2026-07-26T18:00:00","date_gmt":"2026-07-26T16:00:00","guid":{"rendered":"https:\/\/airex.se\/blogg\/tyst-sensor-ingest-stopp\/"},"modified":"2026-07-26T18:00:00","modified_gmt":"2026-07-26T16:00:00","slug":"tyst-sensor-ingest-stopp","status":"publish","type":"post","link":"https:\/\/airex.se\/blogg\/tyst-sensor-ingest-stopp\/","title":{"rendered":"Tio timmar utan data \u2014 och varje komponent gjorde exakt r\u00e4tt"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Jag har en n\u00e4tverkssensor som lyssnar p\u00e5 all trafik som passerar ut och in \u2014 en avlyssningsport p\u00e5 switchen, en maskin som analyserar paketen, och ovanp\u00e5 det en s\u00f6kbar loggdatabas med larm, \u00e4rendehantering och automatisk analys av misst\u00e4nkta objekt. En liten s\u00e4kerhetsavdelning, i praktiken.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En l\u00f6rdag i juli hade den inte tagit emot ett enda nytt h\u00e4ndelse p\u00e5 <strong>tio och en halv timme<\/strong>. Ingenting larmade om det. Sensorn var frisk hela tiden.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Vad som faktiskt h\u00e4nde<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Kedjan \u00e4r v\u00e4rd att f\u00f6lja hela v\u00e4gen, f\u00f6r varje steg \u00e4r helt rimligt i sig.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Disken passerade 85 procent.<\/strong> Loggdatabasen har en inbyggd gr\u00e4ns d\u00e4r den slutar placera nya index p\u00e5 en full disk. Ett skydd, inte ett fel.<\/li>\n<li><strong>Dagens nya index kunde inte skapas.<\/strong> Databasen gick till r\u00f6tt tillst\u00e5nd med ett antal otilldelade datadelar.<\/li>\n<li><strong>Inl\u00e4sningen b\u00f6rjade f\u00e5 avslag<\/strong> och gjorde det enda den kan: f\u00f6rs\u00f6kte igen. Och igen. I en o\u00e4ndlig slinga.<\/li>\n<li><strong>K\u00f6n framf\u00f6r inl\u00e4sningen slutade t\u00f6mmas<\/strong> och slog i sitt minnestak. Den var konfigurerad att aldrig kasta data \u2014 allts\u00e5 v\u00e4grade den ta emot mer.<\/li>\n<li><strong>Producenterna kunde inte skriva.<\/strong> Ingenting n\u00e5dde fram. Kedjan var bruten i b\u00e5da \u00e4ndar samtidigt.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Under hela f\u00f6rloppet skrev sensorn glatt sina loggar till disk i realtid, med noll tappade paket. Fr\u00e5gar man &#8221;fungerar sensorn?&#8221; \u00e4r svaret ja. Fr\u00e5gar man &#8221;vet vi vad som h\u00e4nt p\u00e5 n\u00e4tet de senaste tio timmarna?&#8221; \u00e4r svaret nej.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Varf\u00f6r ingenting larmade<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Det h\u00e4r \u00e4r den obehagliga delen, och den generaliserar l\u00e5ngt utanf\u00f6r s\u00e4kerhetsverktyg.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00d6vervakningen tittade p\u00e5 om tj\u00e4nsterna var ig\u00e5ng. Det var de. Varje enskild komponent kunde med gott samvete rapportera att den m\u00e5dde bra: sensorn f\u00e5ngade paket, k\u00f6n tog emot det den kunde, databasen svarade p\u00e5 f\u00f6rfr\u00e5gningar. Felet fanns bara i <em>fl\u00f6det mellan<\/em> dem.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Och det larm som borde ha g\u00e5tt \u2014 &#8221;det har inte kommit in n\u00e5gon ny data p\u00e5 en timme&#8221; \u2014 fanns inte, av det enkla sk\u00e4let att man inte kommer p\u00e5 att bygga det. Man bygger larm f\u00f6r saker som g\u00e5r s\u00f6nder h\u00f6gljutt.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ett system som ska uppt\u00e4cka avvikelser \u00e5t dig m\u00e5ste framf\u00f6r allt kunna uppt\u00e4cka sin egen tystnad. Annars \u00e4r det f\u00f6rsta en angripare f\u00e5r gratis att du inte vet om du tittar.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u00c5tg\u00e4rden, i tv\u00e5 steg<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Akut:<\/strong> h\u00f6j diskgr\u00e4nserna tillf\u00e4lligt s\u00e5 att databasen kan skapa sina index igen, och starta om inl\u00e4sningen f\u00f6r att bryta den fastnade slingan. K\u00f6n hade beh\u00e5llit allt \u2014 ingenting kastades, det l\u00e5g bara stilla. Efter omstarten str\u00f6mmade det in i n\u00e4rmare tv\u00e5tusen poster i sekunden tills eftersl\u00e4pningen var ikapp.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Permanent:<\/strong> hitta mer utrymme. Det m\u00e4rkliga var att maskinen hade gott om plats \u2014 fast p\u00e5 fel filsystem, och ingetdera gick att krympa. L\u00f6sningen blev att flytta tv\u00e5 dataset som inte har med s\u00e4kerhet att g\u00f6ra till den lediga ytan och montera tillbaka dem p\u00e5 sina gamla platser, s\u00e5 att allt ser likadant ut f\u00f6r programmen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tv\u00e5 detaljer d\u00e4r, f\u00f6r den som g\u00f6r samma sak: kopiera med bevarade r\u00e4ttigheter och l\u00e4nkar och <em>verifiera antalet byte<\/em> innan originalet tas bort \u2014 inte &#8221;det ser r\u00e4tt ut&#8221;. Och p\u00e5 ett system med p\u00e5slagen s\u00e4kerhetsmodul m\u00e5ste filernas m\u00e4rkning s\u00e4ttas explicit p\u00e5 den nya platsen, annars nekas programmen \u00e5tkomst av sk\u00e4l som inte syns i vanliga r\u00e4ttigheter.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Det andra som f\u00f6rv\u00e5nade<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">N\u00e4r jag senare skulle r\u00e4kna larm st\u00e4llde jag en fr\u00e5ga mot databasen och fick noll tr\u00e4ffar. Under en stund trodde jag att larmen var borta ocks\u00e5.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">De fanns. Jag fr\u00e5gade bara p\u00e5 ett f\u00e4lt som saknas p\u00e5 just de posterna \u2014 verktyget sj\u00e4lvt fr\u00e5gar p\u00e5 ett annat. Samma data, tv\u00e5 fr\u00e5gor, olika svar, och bara den ena st\u00e4mmer med verkligheten.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">L\u00e4xan: <strong>n\u00e4r du bygger en egen fr\u00e5ga mot ett system som har en f\u00e4rdig vy, b\u00f6rja med att l\u00e4sa vad den f\u00e4rdiga vyn fr\u00e5gar efter.<\/strong> Annars m\u00e4ter du n\u00e5got annat \u00e4n du tror \u2014 och drar slutsatser om s\u00e4kerhetsl\u00e4get utifr\u00e5n en tom lista.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">S\u00e5 vet du att det funkar<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Larma p\u00e5 fr\u00e5nvaro, inte bara p\u00e5 fel.<\/strong> &#8221;Inga nya h\u00e4ndelser den senaste timmen&#8221; \u00e4r det enskilt viktigaste larmet i en insamlingskedja, och det som oftast saknas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u00d6vervaka disken innan gr\u00e4nsen, inte vid den.<\/strong> \u00c5ttiofem procent var inte en varning i det h\u00e4r systemet \u2014 det var en tr\u00f6skel d\u00e4r beteendet \u00e4ndras. S\u00e5dana tr\u00f6skelv\u00e4rden ska man k\u00e4nna till och larma en bra bit f\u00f6re.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Kontrollera tidsst\u00e4mpeln p\u00e5 det senast indexerade, inte statusf\u00e4rgen.<\/strong> En s\u00e5dan kontroll hade f\u00e5ngat det h\u00e4r p\u00e5 en timme i st\u00e4llet f\u00f6r tio.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Vad jag tar med mig<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Det som g\u00f6r den h\u00e4r incidenten v\u00e4rd att skriva om \u00e4r inte att en disk blev full. Det \u00e4r att <strong>varje komponent gjorde exakt r\u00e4tt<\/strong> \u2014 skyddet mot full disk, den envisa omf\u00f6rs\u00f6ksslingan, k\u00f6n som v\u00e4grade kasta data \u2014 och att summan av fem korrekta beteenden blev ett system som tyst slutade g\u00f6ra sitt jobb.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Det \u00e4r den sv\u00e5raste sortens fel att f\u00f6rutse, och det finns bara ett generellt f\u00f6rsvar: m\u00e4t utfallet, inte komponenterna. Fr\u00e5gan \u00e4r aldrig &#8221;k\u00f6rs tj\u00e4nsten&#8221;. Fr\u00e5gan \u00e4r &#8221;kom det fram data den senaste timmen&#8221;.<\/p>\n\n","protected":false},"excerpt":{"rendered":"<p>Sensorn var frisk hela tiden. \u00c4nd\u00e5 n\u00e5dde ingenting fram p\u00e5 tio och en halv timme, och ingenting larmade \u2014 f\u00f6r fem korrekta beteenden blev tillsammans ett tyst haveri.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-23","post","type-post","status-publish","format-standard","hentry","category-nat-och-sakerhet"],"_links":{"self":[{"href":"https:\/\/airex.se\/blogg\/wp-json\/wp\/v2\/posts\/23","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/airex.se\/blogg\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/airex.se\/blogg\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/airex.se\/blogg\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/airex.se\/blogg\/wp-json\/wp\/v2\/comments?post=23"}],"version-history":[{"count":0,"href":"https:\/\/airex.se\/blogg\/wp-json\/wp\/v2\/posts\/23\/revisions"}],"wp:attachment":[{"href":"https:\/\/airex.se\/blogg\/wp-json\/wp\/v2\/media?parent=23"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/airex.se\/blogg\/wp-json\/wp\/v2\/categories?post=23"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/airex.se\/blogg\/wp-json\/wp\/v2\/tags?post=23"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}