Що означає us= у рядку журналу OpenVPN і як його перетворити
Поле us= — це мікросекундна частина позначки часу журналу, а не ідентифікатор сеансу. Доповніть його до шести цифр і прочитайте весь рядок, перш ніж порівнювати годинники.
Текстовий журнал OpenVPN ставить дату, час і us= значення в один рядок, і остання з трьох — це частина, яку читачі розуміють неправильно. Це мікросекундна складова цієї позначки часу, надрукована без доповнення нулями. Це не ідентифікатор сеансу, не ім’я користувача і не лічильник, і якщо вважати це так, частка секунди перетворюється на впевнений хибний висновок. Перетворіть це як частку відображеної секунди, і решта рядка залишиться читабельною.
Що означають три частини рядка
Дата й ціла секунда йдуть першими, а us= несе залишок менше секунди. Значення 12345 — це дванадцять тисяч триста сорок п’ять мікросекунд, тобто 0.012345 секунди, тому рядок описує 09:15:30.012345, коли надрукований час 09:15:30. Лічильник починається заново з кожною новою секундою, тому пізніший рядок може надрукувати меншу частку, і жоден годинник не йде назад. Лише повна позначка часу впорядковує події.
2026-11-02 08:41:07 us=4820
Одиниця — одна мільйонна секунди, і шість цифр us= охоплюють увесь діапазон від 0.000000 до 0.999999. П’ять цифр описують десятки мілісекунд, а шість — сотні мілісекунд аж до майже цілої секунди. Якщо перетворення дає частку більшу за одиницю, десяткова кома зсунулася, і арифметика неправильна. Зробити це вручну означає поділити надруковане ціле число на мільйон і додати його до цілої секунди.
Доповнення нулями — це пастка. us=42 — це сорок дві мікросекунди, записані як .000042, а не .42. Доповніть ціле число зліва до шести позицій перед перетворенням, і значення перестане виглядати як десяткова частка видимих цифр.
Перетворення рядка без калькулятора
Візьміть надруковану секунду за основу й розглядайте us= як частку. Для 09:15:30 з us=12345 десяткова форма — 09:15:30.012345; для us=900000 вона — 09:15:30.900000. Цифри після коми — це доповнене ціле число, а не ціле число, поділене на тисячу. Якщо спочатку записати шестизначну форму, більшість помилок не виникне.
Якщо ви розбираєте журнали на позначки часу, розбирайте дату, цілу секунду й частку разом. Розбірник, який припускає мілісекунди, впорядкує події неправильно в тисячу разів, а вивід усе одно виглядає правдоподібно.
Коли поля немає в журналі
Мікросекундна частина належить до текстового формату журналу й з’являється лише тоді, коли ввімкнено докладні позначки часу. У форматувальнику позначок часу OpenVPN 2.6 вона додається, коли цей вивід увімкнено, а збережене значення не дорівнює нулю. Тому журнал без us= нічого не говорить про годинник або збірку; зазвичай це означає, що задана докладність занадто низька. Перевірте конфігурацію, перш ніж звинувачувати синхронізацію часу.
Параметр легко підтвердити з конфігурації сервера. Виконайте команду нижче й прочитайте число, яке вона поверне. Докладний вивід позначок часу з’являється на рівні докладності 4, тому менше значення пояснює відсутнє поле без іншої несправності. Запуск тієї самої конфігурації з --verb 4 показує поле, щойно демон перезапуститься з цим рівнем.
grep -nE '^[[:space:]]*verb[[:space:]]+[0-9]' /etc/openvpn/server.conf
Підвищення докладності додає деталі до журналу; воно не покращує годинник. Після перезапуску порівняйте новий рядок зі старим, щоб переконатися, що формат змінився, і знову знизьте рівень, коли питання буде вирішено.
Чого не доводять шість цифр
Шість цифр описують роздільність, а роздільність нічого не говорить про те, чи згодні два хости щодо часу. Клієнт і сервер можуть обидва друкувати мікросекунди, хоча їхні годинники розходяться на секунди. Коли ви зіставляєте події між машинами, записуйте часовий пояс і будь-яке відоме зміщення та віддавайте перевагу полю, яке називає партнера або сеанс, будь-якій позначці часу. Два рядки з однаковою часткою не обов’язково стосуються одного з’єднання.
Збирач може ставити позначку на кожному рядку при надходженні, що додає другу позначку часу, яка належить збирачеві, а не OpenVPN. Визначте, яку з них ви читаєте, перш ніж порівнювати, і зберігайте сирий рядок, щоб порівняння можна було повторити.
Свіже значення us= не доводить, що ввійшов новий клієнт, а повторене не доводить дублюючу подію. Поля партнера й з’єднання відповідають на ці питання.