/var/log/messages, /var/log/syslogи некоторые другие файлы журналов используют метку времени, которая содержит абсолютное время, например Jan 13 14:13:10.
/var/log/Xorg.0.logи /var/log/dmesg, кроме вывода $ dmesg, использовать формат, который выглядит как
[50595.991610] malkovich: malkovich malkovich malkovich malkovich
Я предполагаю / собираю, что числа представляют секунды и микросекунды с момента запуска.
Однако, моя попытка сопоставить эти два набора временных меток (используя выходные данные uptime) дала расхождение около 5000 секунд.
Это примерно столько времени, сколько мой компьютер был приостановлен.
Есть ли удобный способ отобразить числовые метки времени, используемые dmesg и Xorg, в абсолютные метки времени?
Обновить
В качестве предварительного шага к тому, чтобы разобраться в этом, а также, надеюсь, сделать мой вопрос немного более понятным, я написал скрипт на Python для анализа /var/log/syslogи вывода перекоса времени. На моей машине, работающей под управлением Ubuntu 10.10, этот файл содержит множество строк, созданных ядром, которые помечены как меткой времени dmesg, так и меткой времени syslog. Сценарий выводит строку для каждой строки в этом файле, которая содержит метку времени ядра.
Использование:
python syslogdriver.py /var/log/syslog | column -nts $'\t'
Чистый вывод (определения столбцов см. Ниже):
abs abs_since_boot rel_time rel_offset message
Jan 13 07:49:15 32842.1276569 32842.301498 0 malkovich malkovich
... rel_offsetэто 0 для всех промежуточных строк ...
Jan 13 09:55:14 40401.1276569 40401.306386 0 PM: Syncing filesystems ... done.
Jan 13 09:55:14 40401.1276569 40401.347469 0 PM: Preparing system for mem sleep
Jan 13 11:23:21 45688.1276569 40402.128198 -5280 Skipping EDID probe due to cached edid
Jan 13 11:23:21 45688.1276569 40402.729152 -5280 Freezing user space processes ... (elapsed 0.03 seconds) done.
Jan 13 11:23:21 45688.1276569 40402.760110 -5280 Freezing remaining freezable tasks ... (elapsed 0.01 seconds) done.
Jan 13 11:23:21 45688.1276569 40402.776102 -5280 PM: Entering mem sleep
... rel_offset-5280 для всех остальных строк ...
Jan 13 11:23:21 45688.1276569 40403.149074 -5280 ACPI: Preparing to enter system sleep state S3
Jan 13 11:23:21 45688.1276569 40403.149477 -5280 PM: Saving platform NVS memory
Jan 13 11:23:21 45688.1276569 40403.149495 -5280 Disabling non-boot CPUs ...
Jan 13 11:23:21 45688.1276569 40403.149495 -5280 Back to C!
Jan 13 11:23:21 45688.1276569 40403.149495 -5280 PM: Restoring platform NVS memory
Jan 13 11:23:21 45688.1276569 40403.151034 -5280 ACPI: Waking up from system sleep state S3
... Финальные строки находятся чуть дальше, все еще намного выше конца вывода. Некоторые из них, по-видимому, были записаны в dmesgкруговой буфер до того, как произошло приостановление, и были распространены только syslogпосле этого. Это объясняет, почему все они имеют одинаковую метку времени системного журнала.
Определения столбцов:
abs время, зарегистрированное системным журналом.
abs_since_bootэто то же самое время в секундах с момента запуска системы, основанное на содержании /proc/uptimeи значении time.time().
rel_time это временная метка ядра.
rel_offsetэто разница между abs_since_bootи rel_time. Я округляю это до десятков секунд, чтобы избежать одноразовых ошибок, поскольку абсолютные (то есть syslogсгенерированные) временные метки имеют точность только в секундах. Это на самом деле неправильный способ сделать это, так как это действительно (я думаю ..) просто приводит к меньшей вероятности ошибки, превышающей 10. Если у кого-то есть идея получше, пожалуйста, дайте мне знать.
У меня также есть несколько вопросов о формате даты syslog; в частности, мне интересно, появится ли в этом году год. Я предполагаю, что нет, и в любом случае, скорее всего, смогу помочь себе получить эту информацию в TFM, но если кто-то узнает, что это будет полезно. Конечно, если предположить, что кто-то использует этот сценарий в будущем, вместо того, чтобы просто разрушить пару строк кода на Perl.
Следующий:
Поэтому, если один из Вас не предоставит мне какое-либо долгожданное откровение, мой следующий шаг будет состоять в том, чтобы добавить функцию для получения перекоса времени для данной метки времени ядра. Я должен быть в состоянии передать сценарию один или несколько системных журналов вместе с меткой времени ядра, чтобы получить абсолютную метку времени. Затем я могу вернуться к отладке моих проблем с Xorg, которые меня сейчас избегают.
Freezing user space processesкоторых это явно сделано перед сном.
[12345.6789]..), излучаемому ядром, поэтому он все делает правильно , с учетом вопросов, рассмотренных в моем последнем комментарии. Я не уверен, что ядро действительно должно делать здесь; это зависит от того, что означают эти временные метки запуска. Время выполнения (в отличие от времени с момента загрузки) может иметь смысл в некоторых контекстах. Я думаю, что в идеале должна быть надежная запись обоих этих значений.
sort, иметь год, часовой пояс и т. Д. +1 для скрипта python.