Kallstarten som avslöjade vad som bara fanns i minnet

Strömmen låg nere i sjutton timmar. När den kom tillbaka startade servrarna som de skulle, hypervisorerna hittade sin lagring, och de flesta tjänster kom upp av sig själva.

Två gjorde det inte. Och det de hade gemensamt var att de hade fungerat perfekt ända till sekunden innan — av fel anledning.

Fel ett: modulen som aldrig fanns på disk

Inventariesystemet vägrade starta:

Unable to import plugin <namn>: Module not found

Pluginet det gällde var samma synk mot övervakningen som jag skrev om i december. Det stod i konfigurationen. Det hade fungerat i veckor. Men det var installerat in i en körande container, inte in i den avbild containern skapas ur.

Så länge containern levde fanns modulen. I samma ögonblick den återskapades var den borta, och kvar fanns bara konfigurationsraden som pekade på något som inte längre existerade. Tjänsten startade inte alls, vilket i sammanhanget är rätt beteende: en halvkonfigurerad inventariedatabas är värre än ingen.

Fel två: beroendet som ingen skrivit ner

Chattservern startade om i en loop:

Failed to ping DB… lookup postgres: server misbehaving

Databasen den behövde hade inte startat. Inte krashat — bara inte startat, eftersom ingenting sa åt den att göra det vid uppstart. I dagligt bruk märktes det aldrig: databasen hade rullat i månader, och applikationen hittade den alltid.

Ett beroende som aldrig testas är ett beroende man inte vet att man har.

Den frestande fixen, och den rätta

Den snabba vägen var uppenbar: installera modulen i containern igen, starta databasen för hand, och gå och lägga sig. Tjugo minuter, allt grönt.

Det hade också garanterat att samma kväll upprepas vid nästa strömavbrott — och den här gången med mig ännu säkrare på att det ”brukar fungera”.

Så i stället bakades pluginet in i en egen avbild byggd ovanpå den officiella, och byggsteget lades i versionshanteringen tillsammans med resten. Nu kan containern kastas och återskapas hur många gånger som helst utan att något går förlorat.

En liten sak värd att nämna för den som gör detsamma: basavbilden hade fått pip borttaget för att spara utrymme, så bygget måste först lägga tillbaka pakethanteraren innan pluginet kunde installeras. Det är ett tecken i tiden — avbilder blir avsiktligt avskalade, och då flyttas jobbet till den som bygger ovanpå.

Vad ett strömavbrott egentligen är

Det är ett oplanerat test av något man annars aldrig testar: att miljön går att återskapa från det som faktiskt är nedskrivet.

Lång drifttid känns som ett kvalitetsmått. Det är det inte. Lång drifttid betyder bara att ingen har kontrollerat på länge. Varje manuell åtgärd som gjorts i en körande process — ett installerat paket, en ändrad fil, en tjänst som startats för hand — lever kvar i minnet och ser ut som konfiguration, ända tills strömmen går.

Det gäller i högsta grad när arbetet utförs av agenter. Jag lät en agent gå igenom återställningen, och den var snabb och metodisk. Men en agent som får uppgiften ”få igång tjänsten” kommer att få igång tjänsten — på det snabbaste sättet, i den körande containern, precis som en trött människa klockan halv tolv. Skillnaden mellan en åtgärd och en lösning är inget den kan avgöra åt mig. Det är hela mitt jobb i den relationen.

Så vet du att det funkar

Starta om saker med flit, medan du är utvilad och har tid.

  1. Kasta containern, återskapa den. Inte ”starta om” — ta bort och bygg upp igen. Kommer tjänsten tillbaka med all funktionalitet intakt, då finns den på riktigt.
  2. Starta om hela värden och kontrollera vad som inte kom upp av sig självt. Den listan är din verkliga dokumentation över odeklarerade beroenden.
  3. Läs loggarna efteråt, inte bara statusikonerna. Något kan ha startat i tredje försöket och se friskt ut nu.

Vad jag tar med mig

Det som bara finns i en körande process är inte konfiguration. Det är tur.

Och den obekväma insikten: strömavbrottet gjorde mig en tjänst. Två fel som legat och väntat i veckor visade sig samtidigt, på en söndag, i stället för var för sig vid ett sämre tillfälle. Ett system som aldrig startas om samlar på sig sådana här skulder tyst, och räntan tas ut vid det tillfälle du minst av allt hade valt själv.

Skrivet av Daniel Azzarri · Om · Alla inlägg