December 19

Как просматривать и управлять системными логами с помощью journalctl в Linux

Это перевод оригинальной статьи How to View and Manage System Logs Using journalctl in Linux.

Подписывайтесь на телеграм-канал usr_bin, где я публикую много полезного по Linux, в том числе ссылки на статьи в этом блоге.

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

Для работы с этими логами Linux предоставляет инструмент командной строки под названием journalctl. Эта утилита позволяет администраторам просматривать, фильтровать и анализировать логи по всей системе, включая события ядра, логи сервисов и сообщения, созданные пользователями, — всё из единого интерфейса. Независимо от того, отлаживаете ли вы сбой службы, отслеживаете событие безопасности или отслеживаете логи в режиме реального времени, journalctl обеспечивает точность и контроль, необходимые для выполнения задачи.

Из этой статьи вы узнаете, как использовать journalctl, от просмотра логов до расширенных методов фильтрации и очистки.

Что такое journalctl и почему это важно?

journalctl — это утилита командной строки для взаимодействия с журналом systemd. systemd заменяет старые системы инициализации и управляет различными системными задачами, включая ведение логов. Журнал systemd — это централизованная система хранения логов, которая хранит логи для всех сервисов, ядра и пользовательских программ в двоичном формате.

В отличие от традиционных текстовых лог-файлов, бинарный формат позволяет выполнять более сложные запросы и фильтрацию. Эта особенность делает journalctl незаменимым инструментом для администраторов, которым необходимо устранять неполадки, отслеживать производительность системы или проводить аудит событий в режиме реального времени.

К преимуществам использования journalctl относятся:

  • Просмотр логов в реальном времени: journalctl позволяет просматривать логи по мере их появления.
  • Мощная фильтрация: можно фильтровать логи по сервису, времени, приоритету и многим другим критериям.
  • Сохраняемые логи: при наличии соответствующей настройки системные логи могут сохраняться после перезагрузки системы.
  • Единый формат логов: все системные логи хранятся в одном журнале, что упрощает поиск нужных записей.

Основной синтаксис команды journalctl

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

journalctl [options]

Некоторые распространенные варианты:

  • -u используется для указания юнита (например, сервиса).
  • -p для указания приоритета логов
  • –since и –until для фильтрации логов по времени
  • -f для отслеживания логов в реальном времени
  • –no-pager для отключения постраничного вывода при просмотре логов

Давайте рассмотрим несколько практических примеров использования этих вариантов.

Просмотреть все системные логи

Чтобы просмотреть все логи в системном журнале, выполните следующую команду:

journalctl

По умолчанию отображаются логи последней загрузки. Логи отображаются в обратном хронологическом порядке, при этом самые последние записи находятся вверху.

Если вы хотите просмотреть логи за определенный период времени, вы можете отфильтровать их по дате, используя параметры --since и --until (это будет рассмотрено позже).

Просмотр логов для конкретного сервиса

Часто возникает необходимость просмотреть логи, относящиеся к конкретному сервису, например, Apache, Nginx или MySQL. journalctl позволяет фильтровать логи по юниту сервиса с помощью опции -u.

Чтобы просмотреть логи сервиса, выполните следующую команду:

journalctl -u <service_name>

Например, чтобы просмотреть логи веб-сервера Apache (при условии, что имя службы — apache2), выполните следующую команду:

journalctl -u apache2

Также можно просмотреть логи сервисов после перезагрузок, используя флаг --no-pager, чтобы предотвратить постраничный вывод:

journalctl -u apache2 --no-pager

Это полезно, когда необходимо проверить логи после того, как сервис был перезапущен.

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

journalctl предлагает мощную фильтрацию по времени, позволяя указывать логи за определенные даты или временные диапазоны. Параметры –since и –until позволяют указать время начала и окончания просмотра нужных логов.

Например, чтобы просмотреть логи за сегодня:

journalctl --since today

Вы также можете указать собственный диапазон дат или времени. Например, чтобы просмотреть логи за последние два дня:

journalctl --since "2 days ago"

Чтобы указать точный временной диапазон, можно использовать одновременно параметры –since и –until:

journalctl --since "2025-04-01 00:00:00" --until "2025-04-02 00:00:00"

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

Отслеживание логов в режиме реального времени

Иногда крайне важно отслеживать события в логах по мере их возникновения. journalctl позволяет отслеживать логи в режиме реального времени, аналогично команде tail -f, используемой для текстовых файлов. Используйте -f, чтобы непрерывно выводить новые записи логов по мере их появления.

Например, для мониторинга логов конкретного сервиса (например, Apache) в реальном времени:

journalctl -u apache2 -f

Это позволит отображать новые записи логов для сервиса Apache по мере их появления. Чтобы остановить мониторинг, нажмите Ctrl + C.

Просмотр логов по уровню приоритета (только ошибки)

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

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

Чтобы просмотреть только определенный пул ошибок (например, err и выше), используйте параметр -p, за которым следует уровень приоритета. Например:

journalctl -p err

Вместо названия уровня логирования можно также использовать числовые значения. Например, чтобы отобразить логи с уровнем приоритета warning или выше (то есть 4 или выше):

journalctl -p 4

Просмотреть логи предыдущих загрузок системы

С помощью команды journalctl можно просмотреть логи предыдущих загрузок системы. Это полезно при устранении проблем, которые произошли во время прошлых сессий.

Для просмотра логов предыдущей загрузки используйте опцию -b:

journalctl -b -1

Это отобразит логи последней загрузки. Вы можете использовать -b -2, -b -3 и так далее, чтобы просмотреть логи более старых загрузок.

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

Иногда может потребоваться сохранить логи для последующего анализа или передачи. journalctl позволяет экспортировать логи в файл с помощью перенаправления.

Например, чтобы сохранить логи сервиса Apache в файл выполните:

journalctl -u apache2 --no-pager > apache2_logs.txt

Вы также можете указать временной диапазон и сохранить эти логи в файл:

journalctl --since "2025-04-01" --until "2025-04-02" > april_logs.txt

Это позволит экспортировать логи за указанный период времени в файл april_logs.txt.

Проверить размер хранилища логов

Со временем логи могут накапливаться и занимать дисковое пространство. Чтобы предотвратить неконтролируемый рост объема хранилища логов, можно проверить размер журнала systemd.

Для проверки размера журнала используйте следующую команду:

journalctl --disk-usage

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

Очистка старых логов

Если в вашей системе заканчивается место на диске из-за больших файлов логов, вы можете очистить старые логи, изменив настройки журнала systemd. Вы можете ограничить размер логов, установив параметр SystemMaxUse в файле /etc/systemd/journald.conf.

Для ручной очистки старых логов используйте команду journalctl –vacuum-size, чтобы уменьшить размер логов. Например, чтобы ограничить размер логов до 1 ГБ, выполните:

journalctl --vacuum-size=1G

Также можно удалить логи старше определенного количества дней с помощью опции –vacuum-time:

journalctl --vacuum-time=7d

Это позволит удалить логи старше 7 дней.

Рекомендации по использованию journalctl

При использовании journalctl для мониторинга в реальном времени, устранения неполадок или аудита следует учитывать следующие рекомендации:

  • Ограничьте вывод: используйте фильтры, такие как -u, -p и –since, чтобы сузить диапазон просматриваемых логов. Это предотвратит отображение чрезмерного количества информации.
  • Используйте -f для мониторинга: для мониторинга логов в реальном времени используйте опцию -f, чтобы отслеживать логи по мере их появления.
  • Регулярная очистка логов: периодически очищайте старые логи, используя опции –vacuum-size или –vacuum-time, чтобы освободить место на диске.
  • Экспорт логов для анализа: сохранение логов в файл для последующего просмотра или передачи.

Заключение

journalctl — это универсальный и мощный инструмент для просмотра, управления и аудита системных логов в системах Linux, использующих systemd. Освоив основные команды и параметры, вы сможете эффективно отслеживать поведение системы, устранять неполадки и поддерживать её производительность. Независимо от того, управляете ли вы средой разработки или производственной средой, journalctl станет незаменимым инструментом в вашем наборе инструментов системного администрирования.

На этом все! Спасибо за внимание! Если статья была интересна, подпишитесь на телеграм-канал usr_bin, где будет еще больше полезной информации.