Работа с логами в Linux. Команда Journalctl

Systemd – наиболее совершенный менеджер системы и служб для Linux. Это замена демона init с возможностью параллельного запуска процессов при загрузке системы. В данный момент он поддерживается большинством распространенных дистрибутивов, в том числе Fedora, Debian, Ubuntu, OpenSuSE, Arch, RHEL, CentOS и другими.
Одно из главных преимуществ systemd над другими распространенными системами инициализации является поддержка централизованного управления ведения логов системы и процессов при помощи журнала. В данном руководстве мы научимся работать с логами в systemd при помощи команды journalctl.

Важно: Прежде чем приступить к чтению этого руководства, вам может потребоваться разобраться, как управлять сервисами в systemd при помощи команды systemctl, а также создавать и запускать в systemd новые сервисы. Если вы хорошо владеете этими вопросами, можно смело читать дальше.

Настройка 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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

ИТ Проффи

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: