/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.