Jak měřit dobu běhu klienta OpenVPN pomocí háčků up a down
OpenVPN nemá počítadlo doby běhu. Uložte značku epochy z háčku up, při down ji smažte, odečtěte a udržte ji poctivou napříč restarty a instancemi.
Panel požaduje číslo, jak dlouho je připojení aktivní, a OpenVPN ho neposkytuje. Klient ví, kdy jeho tunel vznikl, ale jen když někdo ten okamžik zaznamená dřív, než se ztratí stav relace. Podporované místo je háček up a hodnota, kterou stojí za to uložit, je surová sekunda epochy, ne formátovaný řetězec. Všechno po tom je aritmetika, plus několik pravidel pořadí, která rozhodují, zda číslo zůstane poctivé.
Ověřte, že se háčky skutečně spouštějí
Dokažte, že háček vystřelí, než kolem něj cokoli navrhnete. Minimální klientská konfigurace potřebuje script-security 2 a výslovné cesty up a down; bez bezpečnostního řádku OpenVPN odmítne skript spustit a řekne to jasně. Přidejte up-restart a down-pre zároveň, aby se cesty restartu a ukončení chovaly předvídatelně.
Udělejte první verzi háčku tak, aby připojila své prostředí do souboru a nic jiného nedělala. Ukáže vám to názvy proměnných, které váš build skutečně exportuje, třeba dev a script_type, místo těch, které si pamatujete z jiné verze. Spusťte jedno připojení a jedno odpojení, pak soubor přečtěte. Pokud se nic neobjeví, zastavte se tady, protože návrh se značkou času nad háčkem, který se nikdy nespustí, bude týdny vypadat jako výpadek monitoringu.
Zkontrolujte, pod kterým uživatelem háček běží. Když jsou nastaveny user a group, OpenVPN zahodí oprávnění před spuštěním skriptů, takže adresář, do kterého může psát root, může být pro háček zavřený. Vybírejte cestu z pohledu služby, ne svého shellu.
Zaznamenejte jednu hodnotu epochy a záměrně ji vymažte
Háček up potřebuje jeden řádek, date +%s > /run/openvpn-client.started, s cestou upravenou pro každou instanci. Hodnota epochy se později vyhne otázkám jazyka, časového pásma a formátu a je to stejné číslo, které agent monitoringu může porovnat se svými hodinami.
Mazání je stejně důležité jako zápis. Háček down má soubor vyprázdnit nebo odstranit a down-pre to provede dřív, než se rozhraní zavře, což odstraní okno, ve kterém soubor popisuje tunel, který už zmizel. up-restart pak při vnitřním restartu značku obnoví, místo aby ponechal původní hodnotu. Bez této dvojice restart po vypršení ping dává číslo, které stále roste, dokud se tunel znovu ustavuje.
Vyberte místo se správnou životností. Soubor pod /run zmizí při restartu, což odpovídá realitě, zatímco soubor pod /tmp může být nepředvídatelně uklizen a soubor v konfiguračním adresáři přežívá způsobem, který mate. Nastavte oprávnění tak, aby ho mohl číst jen uživatel služby a čtečka monitoringu.
Počítejte dobu běhu, aniž byste věřili řádkům logu
Přečtěte uloženou sekundu, přečtěte aktuální sekundu, odečtěte. Když soubor chybí nebo je prázdný, poctivá odpověď je, že žádný tunel není aktivní, ne že doba běhu je nula, protože tyto dva stavy mají vyvolat různá upozornění. Držte surové sekundy v datovém nákladu monitoringu a dny a hodiny formátujte až ve vrstvě zobrazení. Formátovač, který zaokrouhluje uvnitř exportéru, zahazuje přesnost, kterou někdo při incidentu bude chtít.
Parsování časových značek z logu je lákavá zkratka a selhává třemi způsoby: formát sleduje, jaké jsou nastavené volby, rotace maže historii a opětovná připojení vypadají jako samostatné relace, ne jeden souvislý tunel. Háček zaznamená událost jednou, v okamžiku, kdy nastane.
Když kontrola běží na jiném hostiteli, posílejte časovou značku, ne dobu trvání, aby čtenář použil své vlastní hodiny. Malý záporný výsledek se pak čte jako rozdíl hodin, ne jako rozbitý háček.
Pokryjte opětovná připojení, restarty a více instancí
Dva tunely na jednom hostiteli potřebují dva soubory, klíčované názvem instance, který služba už používá. Sdílená cesta znamená, že nejnovější připojení přepíše čas startu každého profilu, a symptomem je číslo, které skočí zpět, když začne druhý tunel.
Chování při opětovném připojení si zaslouží vlastní test, protože právě tam věrohodný návrh tiše hlásí špatnou věc. Vynuťte restart shozením protějšku nebo signálem procesu, pak porovnejte stav rozhraní se souborem. Časová značka by se měla posunout dopředu v okamžiku, kdy se tunel vrátí.
Na straně serveru nese stavový soubor hodnotu connected-since pro každého klienta, která odpovídá na jinou otázku: kdy server toho protějšek naposledy viděl. Používejte ji pro křížovou kontrolu, ne jako náhradu, protože mizí spolu s relací, kterou popisuje. Ani jedno měření neříká nic o zdraví aplikace za tunelem.
Spusťte tři kontroly, které zachytí chyby v pořadí
Otestujte normální připojení, vynucené opětovné připojení a čisté zastavení, po každém čtěte seznam rozhraní a soubor společně. Značka, která po čistém zastavení stále existuje, nebo soubor tvrdící tunel, který v seznamu rozhraní není, ukazuje přímo na pořadí háčků. Kontroly spouštějte jako uživatel služby a s cestami služby, protože root shell může vidět jiný soubor a dát sebejistou špatnou odpověď. Pak nechte pomalý poller číst soubor a potvrďte, že do něj nikdy nezapisuje.
Dotaz každých šedesát sekund pokrývá upozorňování a žádný háček by se neměl spoléhat na to, že ten poller žije. Držte ty dvě odpovědnosti oddělené a číslo zůstane důvěryhodné, když se kterákoli strana znovu nasadí.