Что означает 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= не доказывает, что вошёл новый клиент, а повторённое не доказывает дублирующее событие. Поля партнёра и соединения отвечают на эти вопросы.