Een dashboard vraagt om een getal voor hoe lang de verbinding al actief is, en OpenVPN levert dat niet. De client weet wanneer zijn tunnel omhoogkwam, maar alleen als iets dat moment vastlegt voordat de sessiestatus verloren gaat. De ondersteunde plek is de up-hook, en de waarde die het bewaren waard is, is een ruwe epoch-seconde in plaats van een opgemaakte tekenreeks. Alles daarna is rekenwerk, plus een paar ordeningsregels die bepalen of het getal eerlijk blijft.

Controleer of de hooks echt draaien

Bewijs dat de hook afgaat voordat u er iets omheen ontwerpt. Een minimale clientconfiguratie heeft script-security 2 nodig plus expliciete paden up en down; zonder de beveiligingsregel weigert OpenVPN het script uit te voeren en zegt dat ronduit. Voeg up-restart en down-pre tegelijk toe zodat de herstart- en afbouwpaden zich voorspelbaar gedragen.

Laat de eerste versie van de hook zijn omgeving aan een bestand toevoegen en verder niets doen. Dat vertelt u de variabelenamen die uw build werkelijk exporteert, zoals dev en script_type, in plaats van degene die u uit een andere versie onthoudt. Voer één verbinding en één verbreking uit en lees daarna het bestand. Als er niets verschijnt, stop hier, want een tijdstempelontwerp op een hook die nooit draait ziet er wekenlang uit als een bewakingsstoring.

Controleer als welke gebruiker de hook draait. Met user en group ingesteld, geeft OpenVPN rechten op voordat het scripts uitvoert, dus een map waar root in kan schrijven kan voor de hook gesloten zijn. Kies het pad vanuit het standpunt van de dienst in plaats van dat van uw shell.

Leg één epoch-waarde vast en wis die bewust

De up-hook heeft één regel nodig, date +%s > /run/openvpn-client.started, met het pad per instantie aangepast. Een epoch-waarde vermijdt later vragen over taal, tijdzone en formaat, en het is hetzelfde getal dat een bewakingsagent met zijn eigen klok kan vergelijken.

Wissen is net zo belangrijk als schrijven. De down-hook moet het bestand leegmaken of verwijderen, en down-pre zorgt dat dat gebeurt voordat de interface sluit, wat het venster wegneemt waarin het bestand een tunnel beschrijft die al weg is. up-restart ververst daarna de stempel bij een interne herstart in plaats van de oorspronkelijke waarde te laten staan. Zonder dat paar een herstart na ping-time-out levert een getal dat blijft stijgen terwijl de tunnel zich opnieuw opbouwt.

Kies een plek met de juiste levensduur. Een bestand onder /run verdwijnt bij herstart, wat de werkelijkheid volgt, terwijl een bestand onder /tmp onvoorspelbaar kan worden opgeruimd en een in de configuratiemap op een misleidende manier blijft bestaan. Stel rechten zo in dat alleen de dienstgebruiker en de bewakingslezer het kunnen lezen.

Bereken de uptime zonder logregels te vertrouwen

Lees de opgeslagen seconde, lees de huidige seconde, trek af. Als het bestand ontbreekt of leeg is, is het eerlijke antwoord dat er geen tunnel actief is, niet dat de uptime nul is, want die twee toestanden horen verschillende waarschuwingen te geven. Houd ruwe seconden in de bewakingspayload en formatteer dagen en uren in de weergavelaag. Een formatter die binnen de exporteur afrondt, gooit precisie weg die iemand tijdens een incident wil hebben.

Logtijdstempels parseren is de verleidelijke sluiproute, en die faalt op drie manieren: het formaat volgt welke opties dan ook zijn ingesteld, rotatie verwijdert de geschiedenis, en herverbindingen verschijnen als afzonderlijke sessies in plaats van één doorlopende tunnel. De hook legt de gebeurtenis één keer vast, op het moment dat die gebeurt.

Als de controle op een andere host draait, stuur dan de tijdstempel in plaats van de duur, zodat de lezer zijn eigen klok toepast. Een klein negatief resultaat leest dan als klokverschil in plaats van een kapotte hook.

Dek herverbindingen, herstarts en meerdere instanties af

Twee tunnels op één host hebben twee bestanden nodig, gesleuteld op de instantienaam die de dienst al gebruikt. Een gedeeld pad betekent dat de nieuwste verbinding de begintijd van elk profiel overschrijft, en het symptoom is een getal dat achteruit springt wanneer een tweede tunnel start.

Herverbindingsgedrag verdient een eigen test, want daar rapporteert een aannemelijk ontwerp stil het verkeerde. Forceer een herstart door de peer te laten vallen of het proces een signaal te sturen, en vergelijk daarna de interfacestatus met het bestand. De tijdstempel hoort vooruit te gaan op het moment dat de tunnel terugkomt.

Aan de serverkant draagt het statusbestand een connected-since-waarde per client, die een andere vraag beantwoordt: wanneer de server die peer voor het laatst zag. Gebruik hem voor kruiscontrole en niet als vervanging, want hij verdwijnt met de sessie die hij beschrijft. Geen van beide metingen zegt iets over de gezondheid van de applicatie achter de tunnel.

Voer de drie controles uit die ordeningsfouten vangen

Test een normale verbinding, een geforceerde herverbinding en een schone stop, en lees na elk de interfacelijst en het bestand samen. Een stempel die na een schone stop nog aanwezig is, of een bestand dat een tunnel beweert die niet in de interfacelijst staat, wijst rechtstreeks op de hookvolgorde. Voer de controles uit als de dienstgebruiker en met de paden van de dienst, want een root-shell kan een ander bestand zien en een zelfverzekerd verkeerd antwoord geven. Laat daarna een langzame poller het bestand lezen en bevestig dat hij er nooit in schrijft.

Een peiling elke zestig seconden dekt de alarmering, en geen hook hoort erop te vertrouwen dat die poller leeft. Houd die twee verantwoordelijkheden gescheiden en het getal blijft betrouwbaar wanneer een van beide kanten opnieuw wordt uitgerold.

Gerelateerde artikelen