Slik måler du oppetiden til OpenVPN-klienten med up- og down-krokene
OpenVPN har ingen oppetidsteller. Lagre et epoch-stempel fra up-kroken, slett det ved down, trekk det fra og hold det ærlig gjennom omstarter og instanser.
Et dashbord ber om et tall for hvor lenge tilkoblingen har vært oppe, og OpenVPN gir det ikke. Klienten vet når tunnelen kom opp, men bare hvis noe registrerer det øyeblikket før sesjonstilstanden går tapt. Det støttede stedet er up-kroken, og verdien det er verdt å lagre er et rått epoch-sekund fremfor en formatert streng. Alt etter det er aritmetikk, pluss noen få ordensregler som avgjør om tallet forblir ærlig.
Bekreft at krokene faktisk kjører
Bevis at kroken utløses før du designer noe rundt den. En minimal klientkonfigurasjon trenger script-security 2 pluss eksplisitte stier up og down; uten sikkerhetslinjen nekter OpenVPN å kjøre skriptet og sier det rett ut. Legg til up-restart og down-pre samtidig slik at omstarts- og nedtaksstiene oppfører seg forutsigbart.
La den første versjonen av kroken legge miljøet sitt til en fil og ikke gjøre noe annet. Det viser deg variabelnavnene bygget ditt faktisk eksporterer, som dev og script_type, i stedet for dem du husker fra en annen versjon. Kjør én tilkobling og én frakobling, og les deretter filen. Hvis ingenting dukker opp, stopp her, for et tidsstempeldesign oppå en krok som aldri kjører vil se ut som en overvåkingsfeil i ukevis.
Kontroller hvilken bruker kroken kjører som. Med user og group satt slipper OpenVPN privilegier før det kjører skript, så en katalog root kan skrive i kan være stengt for kroken. Velg stien fra tjenestens synspunkt i stedet for skallet ditt.
Registrer én epoch-verdi og slett den bevisst
up-kroken trenger én linje, date +%s > /run/openvpn-client.started, med stien justert per instans. En epoch-verdi unngår senere spørsmål om språk, tidssone og format, og det er det samme tallet en overvåkingsagent kan sammenligne med sin egen klokke.
Sletting betyr like mye som skriving. down-kroken bør tømme eller fjerne filen, og down-pre sørger for at det skjer før grensesnittet lukkes, noe som fjerner vinduet der filen beskriver en tunnel som allerede er borte. up-restart oppdaterer deretter stempelet ved en intern omstart i stedet for å la den opprinnelige verdien stå. Uten det paret en omstart etter ping-tidsavbrudd gir et tall som fortsetter å stige mens tunnelen gjenopprettes.
Velg et sted med riktig levetid. En fil under /run forsvinner ved omstart, noe som stemmer med virkeligheten, mens en fil under /tmp kan bli ryddet uforutsigbart, og en i konfigurasjonskatalogen overlever på en måte som villeder. Sett rettigheter slik at bare tjenestebrukeren og overvåkingsleseren kan lese den.
Beregn oppetid uten å stole på logglinjer
Les det lagrede sekundet, les det gjeldende sekundet, trekk fra. Når filen mangler eller er tom, er det ærlige svaret at ingen tunnel er aktiv, ikke at oppetiden er null, fordi de to tilstandene bør utløse ulike varsler. Behold rå sekunder i overvåkingsdataene, og formater dager og timer i visningslaget. En formaterer som avrunder inne i eksportøren kaster bort presisjon som noen vil ha under en hendelse.
Å parse loggtidsstempler er den fristende snarveien, og den feiler på tre måter: formatet følger hvilke innstillinger som er satt, rotasjon fjerner historikken, og gjenoppkoblinger vises som separate sesjoner i stedet for én sammenhengende tunnel. Kroken registrerer hendelsen én gang, i det øyeblikket den skjer.
Når kontrollen kjører på en annen vert, send tidsstempelet i stedet for varigheten slik at leseren bruker sin egen klokke. Et lite negativt resultat leses da som klokkeforskjell i stedet for en ødelagt krok.
Dekk gjenoppkoblinger, omstarter og flere instanser
To tunneler på én vert trenger to filer, nøklet på instansnavnet tjenesten allerede bruker. En delt sti betyr at den nyeste tilkoblingen overskriver starttiden for hver profil, og symptomet er et tall som hopper bakover når en andre tunnel starter.
Gjenoppkoblingsatferd fortjener sin egen test, for det er der et troverdig design stille rapporterer det gale. Tving en omstart ved å droppe peeren eller sende et signal til prosessen, og sammenlign deretter grensesnitttilstanden med filen. Tidsstempelet bør flytte seg fremover i det øyeblikket tunnelen kommer tilbake.
På serversiden bærer statusfilen en connected-since-verdi per klient, som svarer på et annet spørsmål: når serveren sist så den peeren. Bruk den til krysskontroll i stedet for som erstatning, siden den forsvinner sammen med sesjonen den beskriver. Ingen av målingene sier noe om helsen til applikasjonen bak tunnelen.
Kjør de tre kontrollene som fanger ordensfeil
Test en normal tilkobling, en tvunget gjenoppkobling og en ren stopp, og les grensesnittlisten og filen sammen etter hver. Et stempel som fortsatt er der etter en ren stopp, eller en fil som hevder en tunnel som grensesnittlisten ikke inneholder, peker rett på krokordenen. Kjør kontrollene som tjenestebruker og med tjenestens stier, for et root-skal kan se en annen fil og gi et selvsikkert galt svar. La deretter en langsom poller lese filen og bekreft at den aldri skriver til den.
En avstemning hvert sekstiende sekund dekker varsling, og ingen krok bør regne med at den polleren lever. Hold de to ansvarsområdene atskilt, og tallet forblir pålitelig når en av sidene rulles ut på nytt.