В мире системного администрирования неизбежно возникают ситуации, когда необходимо оперативно диагностировать проблемы: служба не запускается, система работает некорректно, или же необходимо отследить специфические события. Традиционные методы работы с логами, такие как прямой просмотр текстовых файлов в /var/log с помощью tail -f, постепенно уступают место более современным и функциональным инструментам.

Современные дистрибутивы Linux, использующие systemd, централизованно управляют системными логами через systemd journal. Инструментом для взаимодействия с этим журналом является утилита journalctl — мощный и универсальный помощник для любого системного администратора.

journalctl предоставляет обширные возможности по фильтрации и анализу логов: по времени, по службам, по уровням важности, а также позволяет строить цепочки сообщений и работать с логами в реальном времени с удобной цветовой подсветкой.

Основные команды journalctl

Эти команды являются фундаментом для работы с системным журналом и незаменимы для повседневной диагностики.

Просмотр всех записей журнала

Отображает все записи системного журнала, начиная с самой первой доступной.

sudo journalctl

Мониторинг логов в реальном времени

Позволяет отслеживать новые записи журнала в реальном времени, аналогично команде tail -f, но с расширенными возможностями и лучшей интеграцией с systemd.

sudo journalctl -f

Фильтрация по имени службы (юнита)

Отображает логи только для указанной службы или юнита systemd, например, веб-сервера Nginx или SSH-демона.

sudo journalctl -u nginx
sudo journalctl -u ssh

Фильтрация по временному диапазону

journalctl предоставляет гибкие возможности для просмотра логов за определенные периоды.

Логи за текущий день

sudo journalctl --since today

Логи за определенный интервал времени

Позволяет указать точные даты и время начала и окончания периода.

sudo journalctl --since "yesterday 9:00" --until "yesterday 12:00"

Фильтрация по уровню важности (приоритету)

systemd journal использует стандартизированные уровни приоритета для логов, что позволяет быстро отсеять менее важные сообщения и сосредоточиться на критических событиях. Уровни приоритета (от наиболее критичного к наименее):

  • emerg (0): Система непригодна для использования.
  • alert (1): Требуется немедленное действие.
  • crit (2): Критические условия.
  • err (3): Условия ошибок.
  • warning (4): Условия предупреждения.
  • notice (5): Нормальные, но значимые условия.
  • info (6): Информационные сообщения.
  • debug (7): Отладочные сообщения.

Просмотр критических ошибок

Отображает только критические ошибки и записи с более высоким приоритетом (emerg, alert, crit).

sudo journalctl -p crit

Просмотр ошибок и предупреждений

Показывает все сообщения с приоритетом от err до warning включительно.

sudo journalctl -p err..warning

Просмотр информационных сообщений и выше

Включает информационные сообщения (info) и все записи с более высоким приоритетом.

sudo journalctl -p info

Расширенные возможности journalctl

Помимо базовой фильтрации, journalctl предлагает ряд мощных функций для глубокого анализа логов.

Поиск по ключевым словам

Используйте опцию -g (или --grep) для поиска записей, содержащих определенную строку (регистронезависимый поиск по умолчанию).

sudo journalctl -g "error"

Просмотр цепочки сообщений для процесса

Опция -o verbose позволяет получить максимально подробную информацию о каждой записи, включая все метаполя. Используя _PID, можно отфильтровать все сообщения, связанные с конкретным процессом.

sudo journalctl -o verbose _PID=1234

Настройка постоянного хранения логов и экспорт

По умолчанию journald хранит логи в энергозависимой памяти (/run/log/journal) и они удаляются при перезагрузке. Для постоянного хранения необходимо создать директорию, в которую journald будет сохранять бинарные файлы логов.

Включение постоянного хранения

Создание директории /var/log/journal и перезапуск службы systemd-journald активирует постоянное хранение логов.

sudo mkdir -p /var/log/journal
sudo systemctl restart systemd-journald

Экспорт логов в текстовый файл

Для длительного хранения или дальнейшего анализа логи можно экспортировать в обычный текстовый файл. Пример экспорта логов за последние 2 часа:

sudo journalctl --since "2 hours ago" > /home/user/logs.txt

Древовидное представление логов

Опция -o tree может отображать записи журнала в иерархическом виде, что бывает полезно для понимания связей между процессами и их сообщениями (эта функция может быть не во всех версиях journalctl).

sudo journalctl -o tree

Мониторинг логов конкретного юнита с фильтрацией

Комбинирование опций -fu для слежения за юнитом в реальном времени и -p для фильтрации по приоритету позволяет эффективно отслеживать только нужные события.

sudo journalctl -fu apache2 -p err..warning

Важные аспекты и нюансы

  • Ротация логов: Логи journald по умолчанию не являются вечными. Они ротируются на основе размера или возраста, что можно настроить в файле конфигурации /etc/systemd/journald.conf. Здесь можно установить параметры SystemMaxUse, SystemKeepFree, SystemMaxFileSize и другие.
  • Удаленные журналы: Для централизованного сбора логов с нескольких машин может потребоваться установка и настройка systemd-journal-remote (для отправки) и systemd-journal-gateway (для приема) или аналогичных решений.
  • Просмотр логов с LiveCD: В случае, если система не загружается, логи можно просмотреть, подключив диск с неисправной системой к LiveCD/USB. Необходимо смонтировать корневую файловую систему и указать путь к директории журнала.
journalctl -D /mnt/var/log/journal

(где /mnt — точка монтирования корневого раздела вашей системы)

Заключение

journalctl — это не просто просмотрщик логов, а полноценный инструмент для системной диагностики. Он значительно упрощает поиск и анализ информации по сравнению с ручным просмотром множества разрозненных файлов. Освоив его возможности, вы сможете гораздо быстрее и эффективнее реагировать на системные сбои и отслеживать важные события. Помните: если что-то пошло не так, ваша первая команда для диагностики должна быть sudo journalctl -f -p err, чтобы в реальном времени отслеживать критические ошибки.