Библиотека сайта rus-linux.net
systemd: работа с системным журналом
Оригинал: systemd: Using the journal
Автор: Paul W. Frields
Дата публикации: 12 ноября 2015 г.
Перевод: А.Панин
Дата перевода: 30 ноября 2015 г.
systemd: работа с системным журналом
Добро пожаловать в серию статей о системе инициализации systemd. В комплекте поставки systemd содержится большое количество программных компонентов, которые выполняют различные функции помимо запуска системы и управления системными службами. Одним из таких программных компонентов является демон journald
, который осуществляет запись информации о состоянии вашей системы, а также запущенных в ней служб в системный журнал. Навыки работы с утилитой для просмотра системного журнала облегчат процесс поиска информации о системе и ее отладки в случае необходимости.
Базовые приемы работы с системным журналом
Команда journalctl
позволяет пользователю получить доступ к данным системного журнала. По умолчанию journalctl
выводит все содержимое вашего системного журнала:
journalctl
Если вы имеете опыт работы с Linux, вы наверняка помните о том, что раньше для записи информации в системный журнал использовался демон syslogd. Несложно заметить, что вывод утилиты journalctl очень схож с содержимым файла системного журнала syslogd
. Ниже приведен пример вывода, который был сгенерирован на моей машине. Не стоит беспокоиться, если вам не понятен смысл сообщений из данного примера. Все эти сообщения относятся к процессу загрузки системы.
По умолчанию утилита journalctl
использует вспомогательную утилиту для постраничного вывода текстовых данных, поэтому вы можете использовать клавиши PgUp/PgDn для перемещения по системному журналу. Попробуйте воспользоваться данными клавишами и обратите внимание на то, что некоторые строки вывода выделены. Например, сообщения об ошибках выделены красным.
Так как демон journald работает постоянно, системный журнал может содержать системные сообщения, записанные много месяцев назад. Поэтому вам, скорее всего, не захочется пролистывать все страницы системного журнала в поисках недавних сообщений. Если вы ищите информацию, записанную в системный журнал, например, после последней загрузки системы, вы можете воспользоваться параметром -b
:
journalctl -b
Но многих людей не будет устраивать чрезмерно большой объем выведенной в результате исполнения данной команды информации. И это особенно актуально в том случае, если осуществляется диагностика определенной службы. Давайте представим, что мы пытаемся идентифицировать проблему, связанную с системной службой NetworkManager. Вы можете отфильтровать содержимое системного журнала, указав имя юнита systemd с помощью параметра -u
:
journalctl -b -u NetworkManager
Но что делать, если ваша система работала в течение нескольких недель или месяцев с момента последней загрузки? В конце концов, подобный сценарий не является нестандартным для таких систем на основе ядра Linux, как Fedora. К счастью, вы также можете отфильтровать системные сообщения на основе меток времени:
journalctl -b -u NetworkManager --since='yesterday'
Для получения вывода, который будет еще лучше соответствовать поставленной задаче, с помощью параметра -p
может осуществляться фильтрация сообщений в соответствии с их приоритетом. В systemd используются те же приоритеты сообщений, что и в старой системе журналирования событий на основе демона systlogd, такие, как err
для сообщений об ошибках или warning
для сообщений с предупреждениями.
journalctl -b -u NetworkManager --since='yesterday' -p err
Метаданные системного журнала
На самом деле, ваш журнал содержит гораздо больше данных, чем выводится на экран по умолчанию. Каждая запись системного журнала связана с большим набором метаданных.
Если вы используете параметр -o
, вы можете изменить формат вывода записей системного журнала. По умолчанию используется краткий формат вывода
(short
), который соответствует формату записей в файле системного журнала syslogd
. Однако, при активации подробного формата вывода
(verbose
) будут выводиться метаданные, связанные с каждой из записей системного журнала:
Использование полей
Вы также можете осуществлять фильтрацию записей системного журнала на основе значений полей метаданных. В качестве примера возьмем полезное поле _BOOT_ID
. Это поле помогает systemd идентифицировать сессию, связанную с загрузкой системы, к которой относится запись системного журнала. Как мы уже видели, утилита journalctl
поддерживает параметр -b
, позволяющий вывести на экран лишь те записи системного журнала, которые были созданы после последней загрузки системы.
А как насчет записей, созданных перед последней перезагрузкой системы? Вы можете сообщить утилите journalctl о необходимости вывода списка идентификаторов сессий, связанных с загрузками системы:
Как вы видите, идентификатор последней связанной с загрузкой системы сессии соответствует идентификатору в приведенной выше записи (начинается с a8ff73d1...
). Так и должно быть, ведь мы сообщили утилите journalctl
о необходимости вывода лишь тех сообщений, которые были добавлены в журнал после последней загрузки системы. Теперь мы можем просматривать сообщения, добавленные в журнал в рамках различных сессий загрузки системы.
Кстати, вы можете использовать клавишу Tab
для автоматического дополнения рассматриваемых идентификаторов, что позволяет застраховаться от опечаток при их вводе. Кроме того, вы также можете использовать функцию автодополнения при вводе имени поля. Например, попробуйте ввести journalctl_B[TAB]
и имя поля будет автоматически дополнено. Также вы можете попробовать ввести идентификатор 1c[Tab]
, полученный по аналогии с примером выше, после чего он будет автоматически дополнен:
journalctl _BOOT_ID=1c677fd72e82413bb68fe95f10524aef -u NetworkManager
Другим полезным полем является поле _COMM
. Вы можете использовать его для фильтрации записей относительно заданного исполняемого файла, который мог стать причиной некорректной работы системы. Например, служба NetworkManager запускает исполняемый файл dhclient
для получения сетевого адреса вашей системы, работающей под управлением дистрибутива Fedora. В том случае, если ваша система не получает сетевого адреса, вы можете просмотреть сообщения системного журнала, связанные с исполняемым файлом dhclient.
journalctl _COMM=dhclient --since='2 hours ago'
Если же вы желаете узнать все допустимые значения каждого из полей, вы можете воспользоваться параметром -F
. Обратите внимание на то, насколько вывод, полученный после выполнения данной команды, схож с выводом, полученным при использовании параметра --list-boots
:
journalctl -F _BOOT_ID
Например, вы можете использовать следующую команду для получения списка имен всех юнитов systemd, которые были когда-либо запущены:
journalctl -F _SYSTEMD_UNIT
Упрощенный вариант доступа к системному журналу
Возможно, вы не заинтересованы в использовании терминала для доступа к системному журналу. К счастью, существует полезное приложение под названием Logs, которое может быть установлено в дистрибутиве Fedora как редакции Workstation, так и любой другой редакции. Для его установки может использоваться Центр приложений. Данное приложение реализует простой графический интерфейс, позволяющий ознакомиться с содержимым сообщений системного журнала.
Вы могли видеть это приложение ранее. Фактически, мы рассказывали о нем в данной статье Fedora Magazine, посвященной выпуску версии 21 дистрибутива Fedora. Вас наверняка обрадует тот факт, что за прошедшее время данное приложение стало молниеносно быстро работать и научилось загружать записи системного журнала по требованию.
Сообщения системного журнала распределяются по категориям в соответствии с их источниками. Для выбора категории следует использовать список в левой части окна приложения. Также вы можете выбрать определенную сессию, связанную с загрузкой системы, для исследования определенных записей. Нажмите на заголовок колонки списка сообщений для хранения даты и времени для выбора предпочтительной сессии. Также вы можете осуществить поиск определенных сообщений с помощью соответствующего инструментария приложения. Наконец, для вывода подробностей о любом сообщении следует просто нажать на соответствующий элемент списка сообщений.
Надеюсь, что в рамках данной статьи мне удалось продемонстрировать вам некоторые интересные приемы работы с системным журналом. Для получения дополнительной полезной информации рекомендую обратиться к данной статье из серии "systemd для системных администраторов". Удачи при работе с системным журналом!
На нашем сайте вы можете прочитать большую серию переводов, посвященных системе инициализации systemd:
- Jon Stanley, перевод: А.Панин, "systemd: преобразование сценариев sysvinit для работы с systemd" В данной статье рассматривается методика преобразования устаревших сценариев инициализации, которые вы могли модифицировать в соответствии со своими потребностями, для работы с systemd.
- Bryan Sutherland, перевод: А.Панин, "systemd: основные приемы работы с юнит-файлами" Система инициализации systemd разделена на множество программных компонентов, что значительно упрощает процедуру управления компонентами вашей системы. systemd использует юнит-файлы для конфигурации и управления системными ресурсами, такими, как процессы и ваша файловая система. Благодаря этим файлам вы можете использовать systemd для конфигурации вашей системы в соответствии с вашими пожеланиями.
- Ryan Lerch, перевод: А.Панин, "systemd: что такое система инициализации?" systemd является набором инструментов для выполнения широкого спектра системных задач, включая инициализацию системы, а также для управления и отслеживания состояния системных служб и демонов как в процессе загрузки системы, так и в процессе ее работы.
- Carla Schroder, перевод: Н.Ромоданов, "Управление сервисами в Linux с systemd" Вы уже читали все о systemd, новом демоне Linux init. Вы знаете, что он делает, и почему. Теперь пришло время окунуться глубже и узнать, как он себя ведет - или, по крайней мере, как запускает, останавливает и выдает информацию о сервисах.
- Carla Schroder, перевод: Н.Ромоданов, "Знакомимся с уровнями запуска Systemd и командами управления сервисами" В прошлом у нас были статические уровни запуска. Вместо уровней запуска, systemd позволяет создавать различные состояния, предоставляя вам гибкий механизм создания различных конфигураций загрузки.
- Carla Schroder, перевод: Н.Ромоданов, "Изучаем и используем Systemd" Ценность systemd является спорной по нескольким причинам: он заменяет то, что, как думают многие пользователи Linux, заменять не требуется, и все гримасы разработчиков systemd не завоевывают сердца и умы.
- Carla Schroder, перевод: Н.Ромоданов, "Проходим еще раз, еще один Linux Init: введение в systemd" В течение очень многих лет в системе Linux для управления запуском системы хватало механизма sysvinit. Затем появились две новых системы инициализации Linux: Ubuntu's Upstart, впервые выпущенная в 2006 году, и systemd, появившаяся в 2009 году. Что же это за штуковина systemd, и какие преимущества она даст нам, простым пользователям Linux? Н.Ромоданов перевел 4 статьи о systemd, первую из которых вы можете прочесть сегодня.