Systemd – наиболее совершенный менеджер системы и служб для Linux. Это замена демона init с возможностью параллельного запуска процессов при загрузке системы. В данный момент он поддерживается большинством распространенных дистрибутивов, в том числе Fedora, Debian, Ubuntu, OpenSuSE, Arch, RHEL, CentOS и другими.
Одно из главных преимуществ systemd над другими распространенными системами инициализации является поддержка централизованного управления ведения логов системы и процессов при помощи журнала. В данном руководстве мы научимся работать с логами в systemd при помощи команды journalctl.
Важно: Прежде чем приступить к чтению этого руководства, вам может потребоваться разобраться, как управлять сервисами в systemd при помощи команды systemctl, а также создавать и запускать в systemd новые сервисы. Если вы хорошо владеете этими вопросами, можно смело читать дальше.
- Настройка Journald для сбора записей логов
- Хранение журнала на диске
- Установка корректного системного времени
- Просмотр записей журнала
- Просмотр записей журнала по загрузкам
- Фильтрация записей журнала по времени
- Просмотр последних записей журнала
- Просмотр записей журнала, созданных ядром
- Просмотр записей конкретных сервисов
- Просмотр записей по идентификатору процесса
- Просмотр записей конкретного пользователя или группы
- Просмотр записей, созданных файлом
- Просмотр записей по приоритету
- Просмотр записей в реальном времени
- Проверка целостности
- Удаление старых записей журнала
- Ротация файлов журнала
Настройка Journald для сбора записей логов
journald – это программа, собирающая и записывающая сообщения логов по всей системе. Это данные о загрузке, сообщения от ядра, syslog или различных приложений. Все эти сообщения хранятся в централизованном месторасположении – файле журнала.
Параметры journald хранятся в файле конфигурации по умолчанию /etc/systemd/journald.conf
. Он генерируется при компиляции и содержит опции, значение которых можно изменять в соответствии с требованиями вашей системы.
Вот пример содержимого этого файла
Хранение журнала на диске
В некоторых дистрибутивах Linux, в том числе Ubuntu и ее производных, таких как Linux Mint, постоянное хранение сообщений о загрузке на диске по умолчанию отключено. Это можно изменить, установив параметру «Storage» значение «persistent», как показано ниже. Будет создана директория /var/log/journal
, и все файлы журнала будут храниться в ней. Откройте файл на редактирование
$ sudo vi /etc/systemd/journald.conf
И замените #Storage=auto на.
[Journal]
Storage=persistent
…
Значение остальных опций в разделе «[Journal]» можно узнать на соответствующей man-странице:
$ man journald.conf
Установка корректного системного времени
Для эффективного управления логами при помощи службы journald нужно убедиться, что настройки времени, в том числе часовой пояс, установлены корректно. Для просмотра текущей даты и времени введите команду:
$ timedatectl
или
$ timedatectl status
Для установки часового пояса и системного времени воспользуйтесь следующими командами:
$ sudo timedatectl set-timezone ЧАСОВОЙ_ПОЯС $ sudo timedatectl set-time “ЧЧ:ММ:СС”
Просмотр записей журнала
journalctl – это утилита для просмотра содержимого журнала systemd, который ведется службой journald. Для отображения всех собранных логов без какой-либо фильтрации просто выполните команду без опций:
$ journalctl
Результат будет иметь приблизительно следующий вид:
Просмотр записей журнала по загрузкам
Список загрузок (относительно текущей), их идентификаторы, а также временные метки первого и последнего сообщений, соответствующих загрузке, можно получить при помощи опции —list-boots.
$ journalctl --list-boots
Чтобы просмотреть записи журнала текущей загрузку (номер 0), воспользуйтесь опцией –b:
$ journalctl -b
Для просмотра журнала, начиная с предыдущей загрузки, укажите после опции –b относительный указатель -1, как показано ниже:
$ journalctl -b -1
Также можно использовать идентификатор загрузки:
$ journalctl -b 9fb590b48e1242f58c2579defdbbddc9
Фильтрация записей журнала по времени
Для использования времени в формате UTC укажите опцию –-utc:
$ journalctl --utc
Чтобы просмотреть все записи, начиная с конкретной даты и времени, например, 8:15 утра 15 февраля 2019, выполните команду:
$ journalctl --since "2019-02-15 08:15:00"
Аналогичным образом можно указать начальную дату today (сегодня) или yesterday (вчера):
$ journalctl --since today $ journalctl --since yesterday
Просмотр последних записей журнала
Для просмотра последних записей журнала (по умолчанию 10) используется опция –n.
$ journalctl –n
После нее можно указать необходимое количество записей:
$ journalctl -n 20
Просмотр записей журнала, созданных ядром
Чтобы вывести только сообщения ядра, воспользуйтесь флагом -k. Вместе с этой опцией можно также указать определенную загрузку:
$ journalctl -k $ journalctl -k -b $ journalctl -k -b 9fb590b48e1242f58c2579defdbbddc9
Просмотр записей конкретных сервисов
Для просмотра записей журнала конкретной службы используется опция –u, после которой нужно указать эту службу:
$ journalctl -u apache2.service
Чтобы ограничиться текущей загрузкой, выполните команду:
$ journalctl -b -u apache2.service
Показать записи, начиная с предыдущей загрузки:
$ journalctl -b -1 -u apache2.service
Можно указать несколько сервисов и сочетать фильтрацию по сервису и по времени:
$ journalctl -u apache2.service $ journalctl -u apache2.service --since today $ journalctl -u apache2.service -u nagios.service --since yesterday
Просмотр записей по идентификатору процесса
Логи, созданные заданным процессом, можно просмотреть, указав его идентификатор (PID):
$ journalctl _PID=19487 $ journalctl _PID=19487 --since today $ journalctl _PID=19487 --since yesterday
Просмотр записей конкретного пользователя или группы
Для просмотра таких записей нужно указать идентификатор пользователя или группы:
$ journalctl _UID=1000 $ journalctl _UID=1000 --since today $ journalctl _UID=1000 -b -1 --since today
Просмотр записей, созданных файлом
Чтобы показать все записи, созданные определенным файлом (например, исполняемым), просто введите после команды его имя:
$ journalctl /usr/bin/dbus-daemon $ journalctl /usr/bin/bash
Просмотр записей по приоритету
Результаты можно также фильтровать по приоритету при помощи флага «–p», после которого можно указать приоритет. Вот возможные значения приоритета:
0, emerg – система не работоспособна
1, alert – система требует немедленного вмешательства
2, crit – состояние системы критическое
3, err – сообщение об ошибке
4, warning – предупреждение о возможной проблеме
5, notice – нормальное, но важное событие
6, info – информационное сообщение
7, debug – отладочное сообщение
Для вывода всех сообщений об ошибках выполните команду
$ journalctl -p err
Можно указать диапазон в следующем формате, в данном случае будут выводиться записи с приоритетом от сообщений о неработоспособности до предупреждений:
$ journalctl -p 0..4
Цифровые значения и ключевые слова равнозначны:
$ journalctl -p emerg..warning
Просмотр записей в реальном времени
Опция «-f» позволяет вам следить за журналом в процессе его написания:
$ journalctl -f
Проверка целостности
Для проверки внутренней целостности журналов используется опция —verify. Если все хорошо, результатом будет PASS.
$ journalctl --verify
Удаление старых записей журнала
Опция «—disk-usage» показывает общий объем дискового пространства, занимаемого активными и архивированными файлами журнала.
$ journalctl —disk-usage
Для удаления старых (архивированных) файлов воспользуйтесь командами ниже.
Удалять файлы, пока используемое ими дисковое пространство не сократится до указанного размера:
$ sudo journalctl --vacuum-size=50M
Удалить все файлы, созданные раньше заданного промежутка времени:
$ sudo journalctl --vacuum-time=1years
Удалять файлы, пока их количество не станет равно заданному:
$ sudo journalctl --vacuum-files=4
Ротация файлов журнала
При помощи опции —rotate можно задать journald выполнение ротации файлов журнала. До завершения процесса ротации команда не возвращает никакого результата:
$ sudo journalctl --rotate
Для более подробного руководства и информации об опциях обратитесь к man-странице команды:
$ man journalctl