Как да измерите времето на работа на OpenVPN клиент с куките up и down
OpenVPN няма брояч на времето за работа. Съхранете отпечатък от епохата чрез куката up, изчистете го при down, извадете го и го пазете точен при рестарти и инстанции.
Табло за управление иска число за това от кога връзката е активна, а OpenVPN не го предоставя. Клиентът знае кога тунелът му е вдигнат, но само ако нещо запише този момент, преди състоянието на сесията да се загуби. Поддържаното място е куката up, а стойността, която си струва да се съхрани, е сурова секунда от епохата, а не форматиран низ. Всичко след това е аритметика, плюс няколко правила за реда, които решават дали числото остава честно.
Потвърдете, че куките наистина се изпълняват
Докажете, че куката се задейства, преди да проектирате каквото и да е около нея. Минималната клиентска конфигурация изисква script-security 2 плюс изрични пътища up и down; без реда за сигурност OpenVPN отказва да изпълни скрипта и го казва направо. Добавете up-restart и down-pre едновременно, за да се държат предвидимо пътищата за рестарт и за спиране.
Направете първата версия на куката да добавя средата си към файл и да не прави нищо друго. Така ще видите имената на променливите, които вашата сборка действително експортира, например dev и script_type, вместо онези, които помните от друга версия. Направете едно свързване и едно прекъсване, после прочетете файла. Ако не се появи нищо, спрете тук, защото дизайн с отпечатък върху кука, която никога не се изпълнява, ще изглежда като отказ на мониторинга в продължение на седмици.
Проверете под кой потребител работи куката. С user и group зададени, OpenVPN се отказва от права преди да пусне скриптове, така че директория, в която root може да пише, може да е затворена за куката. Избирайте пътя от гледна точка на услугата, а не на вашата обвивка.
Запишете една стойност от епохата и я изчистете нарочно
Куката up се нуждае от един ред, date +%s > /run/openvpn-client.started, с път, коригиран за всяка инстанция. Стойността от епохата избягва по-късно въпроси за език, часова зона и формат и е същото число, което агент за мониторинг може да сравни със своя часовник.
Изчистването е също толкова важно, колкото записването. Куката down трябва да изпразни или премахне файла, а down-pre прави това преди интерфейсът да се затвори, което премахва прозореца, в който файлът описва тунел, който вече го няма. up-restart след това опреснява отпечатъка при вътрешен рестарт, вместо да остави първоначалната стойност. Без тази двойка, рестарт след изтичане на ping дава число, което продължава да расте, докато тунелът се установява отново.
Изберете място с правилния живот. Файл под /run изчезва при презареждане, което отговаря на реалността, докато файл под /tmp може да бъде изчистен непредвидимо, а такъв в конфигурационната директория оцелява по подвеждащ начин. Задайте права, така че само потребителят на услугата и читателят на мониторинга да могат да го четат.
Изчислете времето за работа, без да се доверявате на редове от журнала
Прочетете съхранената секунда, прочетете текущата секунда, извадете. Когато файлът липсва или е празен, честният отговор е, че няма активен тунел, а не че времето за работа е нула, защото тези две състояния трябва да вдигат различни предупреждения. Пазете суровите секунди в полезния товар на мониторинга и форматирайте дни и часове в слоя за показване. Форматиращ, който закръглява вътре в експортьора, изхвърля точност, която някой ще поиска по време на инцидент.
Разборът на времеви отпечатъци от журнала е изкушаващият пряк път и се проваля по три начина: форматът следва зададените опции, ротацията премахва историята, а повторните връзки изглеждат като отделни сесии, а не един непрекъснат тунел. Куката записва събитието веднъж, в момента, в който се случи.
Когато проверката работи на друг хост, изпращайте отпечатъка, а не продължителността, за да приложи читателят своя часовник. Тогава малък отрицателен резултат се чете като разминаване на часовници, а не като счупена кука.
Покрийте повторните връзки, рестартите и множеството инстанции
Два тунела на един хост се нуждаят от два файла, ключосани по името на инстанцията, което услугата вече използва. Споделен път означава, че най-скорошната връзка презаписва началния час на всеки профил, а симптомът е число, което скача назад, когато стартира втори тунел.
Поведението при повторно свързване заслужава отделен тест, защото именно там правдоподобен дизайн тихо съобщава грешното. Принудете рестарт, като отхвърлите партньора или сигнализирате процеса, после сравнете състоянието на интерфейса с файла. Отпечатъкът трябва да се придвижи напред в момента, в който тунелът се върне.
От страна на сървъра файлът за състояние носи стойност connected-since за всеки клиент, която отговаря на друг въпрос: кога сървърът за последно е видял този партньор. Използвайте я за кръстосана проверка, а не като заместител, защото тя изчезва заедно със сесията, която описва. Нито едно от двете измервания не казва нищо за здравето на приложението зад тунела.
Изпълнете трите проверки, които хващат грешки в реда
Тествайте нормално свързване, принудително повторно свързване и чисто спиране, като четете списъка с интерфейси и файла заедно след всяко. Отпечатък, който все още е там след чисто спиране, или файл, който твърди тунел, който списъкът с интерфейси не съдържа, сочи направо към реда на куките. Изпълнявайте проверките като потребителя на услугата и с пътищата на услугата, защото root обвивката може да види друг файл и да даде уверен грешен отговор. После оставете бавен процес, който периодично чете файла, и потвърдете, че никога не пише в него.
Анкета на всеки шестдесет секунди покрива известяването и нито една кука не бива да разчита, че този процес е жив. Дръжте тези две отговорности разделени и числото остава надеждно, когато някоя от страните бъде разгърната наново.