← Homelab

De storing die geen storing was

Elke ~40 uur vielen bijna alle blackbox-probes tegelijk om, acht tot veertien minuten lang. De diensten waren nooit weg. De handtekening zat in één metric: de DNS-lookuptijd sprong van 11 ms naar 8 seconden.

Het symptoom

Ongeveer elke 40 uur gingen 11 tot 13 van de 14 blackbox-probes tegelijk op rood, met een regen aan kritieke meldingen. Na 8 tot 14 minuten was alles weer groen.

De diensten waren er gewoon

Tijdens zo'n venster stond geen enkel intern scrape-target op down: 21 targets, en alle samples up=1. De diensten draaiden dus. Alleen de probes van buitenaf faalden.

De handtekening

De blackbox-exporter splitst de duur van een probe op in fasen. probe_dns_lookup_time_seconds sprong in elk venster van ~0,011 s naar 8,004 s, voor alle targets tegelijk. Over zeven dagen: 250 mislukte probes op ruim 120.000, waarvan 94 % met een DNS-lookup van vier seconden of meer.

Twee patronen uit elkaar houden

Dat was de kern van het onderzoek:

PatroonDNS-lookupBetekenis
Veel targets tegelijk, DNS traag~8 sNaamresolutie, niet de diensten
Eén target, DNS snel, statuscode 0, timeout~0,015 sEen site die echt niet antwoordt

Het tweede patroon kwam los daarvan ook voor, bij één site, en is een apart probleem.

Wat ik uitsloot

Alle zones staan op dezelfde autoritatieve nameservers. Geen DNSSEC-problemen, identieke SOA-serials, geen lame delegation, en de WAN was in elk venster gewoon op. Een vergelijking met een extern domein bleek een zwakke controle: dat domein draaide bij dezelfde partij als de recursieve resolver. "Alleen mijn zones falen" was daarmee nog niet hard bewezen.

Meten per hop

Om het verschil te zien tussen "de autoritatieve DNS hapert" en "het pad ernaartoe hapert", schreef ik een DNS-canary: elke 30 seconden een lookup via de lokale stub, via de publieke resolver, via de router, en rechtstreeks bij elke autoritatieve server zonder recursie, met neutrale controledomeinen ernaast.

De meldingen

Los van de oorzaak was het aantal meldingen het grootste probleem. Een alert per instance zonder aggregatie maakt van één DNS-hik dertien kritieke incidenten. Langere scrape-intervallen helpen daar niet; een regel als count by (job) (probe_success == 0) > 5, met een inhibit op de losse alerts, wel.

Les

Kijk bij massale uitval eerst naar wat de targets gemeen hebben. Dertien diensten die tegelijk "uitvallen", zijn zelden dertien storingen.