Как просматривать и управлять системными логами с помощью 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, где будет еще больше полезной информации.