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

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

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

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

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

journalctl — это консольная утилита для работы с журналом systemd. Поскольку systemd пришёл на смену старым init-системам, он взял на себя множество задач (впрочем есть мнение, что systemd на себя что-то слишком много всего взял), включая ведение логов. Журнал systemd — это централизованное хранилище логов, куда попадает всё: сообщения сервисов, ядра и пользовательских программ. Все они сохраняются не в обычных текстовых файлах, а в бинарном формате.

Такой формат хранения даёт больше возможностей для поиска и фильтрации записей. Именно поэтому journalctl стал незаменимым инструментом для администраторов, которым нужно оперативно решать проблемы, следить за производительностью или анализировать события в реальном времени.

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

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

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

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

journalctl [опции]

Несмотря на простоту, journalctl имеет массу полезных параметров. Вот несколько самых часто используемых:

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

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

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

Чтобы вывести все записи из системного журнала, выполните:

journalctl

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

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

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

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

Чтобы вывести логи нужного сервиса, выполните:

journalctl -u <имя_сервиса>

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

journalctl -u apache2

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

journalctl -u apache2 --no-pager

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

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

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

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

journalctl --since today

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

journalctl --since "2 days ago"

А если требуется выбрать точный диапазон по дате и времени — используйте обе опции вместе:

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

Чтобы вывести логи с прошлого запуска, выполните:

journalctl -b -1

Эта команда покажет журнал предыдущей загрузки. Аналогично можно указать более старые сессии — например:

journalctl -b -2
journalctl -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

Эта команда удалит логи, которым больше семи дней.

Рекомендации по работе с journalctl

Когда вы используете journalctl для мониторинга, отладки или аудита системы, стоит придерживаться нескольких простых, но полезных практик:

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