Så mäter du OpenVPN-klientens drifttid med up- och down-hakarna
OpenVPN har ingen drifttidsräknare. Spara en epoch-stämpel från up-haken, rensa den vid down, subtrahera och håll den ärlig genom omstarter och instanser.
En instrumentpanel frågar efter en siffra för hur länge anslutningen varit uppe, och OpenVPN levererar ingen. Klienten vet när dess tunnel kom upp, men bara om något registrerar det ögonblicket innan sessionsläget går förlorat. Den stödda platsen är up-haken, och värdet som är värt att spara är en rå epoch-sekund i stället för en formaterad sträng. Allt därefter är aritmetik, plus några ordningsregler som avgör om siffran förblir ärlig.
Bekräfta att hakarna faktiskt körs
Bevisa att haken utlöses innan du designar något runt den. En minimal klientkonfiguration behöver script-security 2 plus explicita sökvägar up och down; utan säkerhetsraden vägrar OpenVPN att köra skriptet och säger det rakt ut. Lägg till up-restart och down-pre samtidigt så att omstarts- och nedmonteringssökvägarna beter sig förutsägbart.
Låt den första versionen av haken lägga sin miljö till en fil och inte göra något annat. Det visar vilka variabelnamn din byggnad faktiskt exporterar, som dev och script_type, i stället för dem du minns från en annan version. Kör en anslutning och en frånkoppling och läs sedan filen. Om inget dyker upp, stanna här, för en tidsstämpeldesign ovanpå en hake som aldrig körs kommer att se ut som ett övervakningsfel i veckor.
Kontrollera vilken användare haken körs som. Med user och group satta släpper OpenVPN privilegier innan det kör skript, så en katalog som root kan skriva i kan vara stängd för haken. Välj sökvägen ur tjänstens perspektiv i stället för ditt skals.
Registrera ett enda epoch-värde och rensa det medvetet
up-haken behöver en rad, date +%s > /run/openvpn-client.started, med sökvägen justerad per instans. Ett epoch-värde undviker senare frågor om språk, tidszon och format, och det är samma tal som en övervakningsagent kan jämföra med sin egen klocka.
Rensning betyder lika mycket som skrivning. down-haken bör tömma eller ta bort filen, och down-pre ser till att det sker innan gränssnittet stängs, vilket tar bort fönstret där filen beskriver en tunnel som redan är borta. up-restart uppdaterar sedan stämpeln vid en intern omstart i stället för att lämna det ursprungliga värdet kvar. Utan det paret en omstart efter ping-timeout ger ett tal som fortsätter stiga medan tunneln återupprättas.
Välj en plats med rätt livslängd. En fil under /run försvinner vid omstart, vilket stämmer med verkligheten, medan en fil under /tmp kan rensas oförutsägbart och en i konfigurationskatalogen överlever på ett sätt som vilseleder. Sätt behörigheter så att bara tjänsteanvändaren och övervakningsläsaren kan läsa den.
Beräkna drifttid utan att lita på loggrader
Läs den sparade sekunden, läs den aktuella sekunden, subtrahera. När filen saknas eller är tom är det ärliga svaret att ingen tunnel är aktiv, inte att drifttiden är noll, eftersom dessa två tillstånd bör utlösa olika larm. Behåll råa sekunder i övervakningsdata och formatera dagar och timmar i visningslagret. En formaterare som avrundar inne i exportören kastar bort precision som någon kommer att vilja ha under en incident.
Att tolka loggtidsstämplar är den frestande genvägen, och den misslyckas på tre sätt: formatet följer vilka inställningar som än är satta, rotation tar bort historiken och återanslutningar visas som separata sessioner i stället för en sammanhängande tunnel. Haken registrerar händelsen en gång, i det ögonblick den inträffar.
När kontrollen körs på en annan värd, skicka tidsstämpeln i stället för varaktigheten så att läsaren använder sin egen klocka. Ett litet negativt resultat läses då som klockavvikelse i stället för en trasig hake.
Täck återanslutningar, omstarter och flera instanser
Två tunnlar på en värd behöver två filer, nycklade på instansnamnet som tjänsten redan använder. En delad sökväg innebär att den senaste anslutningen skriver över varje profils starttid, och symptomet är ett tal som hoppar bakåt när en andra tunnel startar.
Återanslutningsbeteendet förtjänar ett eget test, för det är där en trolig design tyst rapporterar det felaktiga. Tvinga fram en omstart genom att släppa peeren eller skicka en signal till processen och jämför sedan gränssnittstillståndet med filen. Tidsstämpeln bör flyttas framåt i det ögonblick tunneln återvänder.
På serversidan bär statusfilen ett connected-since-värde per klient, som svarar på en annan fråga: när servern senast såg den peeren. Använd den för korsvis kontroll och inte som ersättning, eftersom den försvinner tillsammans med sessionen den beskriver. Ingen av mätningarna säger något om hälsan hos programmet bakom tunneln.
Kör de tre kontroller som fångar ordningsfel
Testa en normal anslutning, en påtvingad återanslutning och ett rent stopp, och läs gränssnittslistan och filen tillsammans efter varje. En stämpel som fortfarande finns kvar efter ett rent stopp, eller en fil som påstår en tunnel som inte finns i gränssnittslistan, pekar rakt på hakornas ordning. Kör kontrollerna som tjänsteanvändaren och med tjänstens sökvägar, för ett root-skal kan se en annan fil och ge ett självsäkert fel svar. Låt sedan en långsam pollare läsa filen och bekräfta att den aldrig skriver till den.
En avfrågning var sextionde sekund täcker larmning, och ingen hake bör räkna med att den pollaren lever. Håll de två ansvarsområdena åtskilda och talet förblir pålitligt när endera sidan rullas ut igen.