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