Как смотреть логи сервисов через journalctl: полное руководство
Пошаговая инструкция по просмотру и анализу системных логов в Linux с помощью journalctl
Введение
В современных Linux-дистрибутивах systemd управляет не только сервисами, но и собирает их логи в централизованное хранилище — журнал (journal). Для доступа к нему используется утилита journalctl. Она позволяет просматривать сообщения ядра, системных служб и приложений, фильтровать их по множеству параметров и отслеживать в реальном времени.
Это руководство поможет вам освоить journalctl от базовых команд до продвинутой фильтрации. Вы научитесь быстро находить причину сбоя сервиса, отслеживать ошибки и настраивать хранение логов.
Требования
Linux-система с systemd (Ubuntu, Debian, CentOS, Fedora, Arch и др.).
Доступ к терминалу с правами обычного пользователя (для некоторых команд потребуется sudo).
Базовое знакомство с командной строкой.
Установленный пакет systemd-journald (обычно входит в состав systemd).
Шаг 1: Проверка доступности journalctl
Убедитесь, что утилита установлена и работает:
journalctl --versionКоманда выведет версию systemd. Если утилита отсутствует, установите пакет systemd через менеджер пакетов вашего дистрибутива.
Также проверьте, что служба journald запущена:
systemctl status systemd-journaldЕсли служба неактивна, запустите её:
sudo systemctl start systemd-journald
sudo systemctl enable systemd-journaldШаг 2: Просмотр всех логов
Самая простая команда — journalctl без аргументов. Она выводит весь журнал, начиная с самых старых записей. Вывод открывается в пейджере less, где можно прокручивать стрелками, искать по / и выходить по q.
journalctlЕсли журнал большой, вывод может занять много времени. Для ускорения используйте фильтры, описанные ниже.
Шаг 3: Просмотр логов конкретного сервиса
Чтобы увидеть сообщения только от определённой службы, используйте опцию -u (или --unit):
journalctl -u nginx.serviceМожно указать несколько сервисов через запятую:
journalctl -u nginx.service -u php-fpm.serviceОбратите внимание: имя юнита должно быть полным, включая суффикс .service. Для пользовательских юнитов добавьте флаг --user.
Шаг 4: Отслеживание логов в реальном времени
Аналог tail -f — опция -f (follow). Она показывает последние строки и продолжает выводить новые сообщения по мере поступления:
journalctl -u nginx.service -fЧтобы начать с определённого количества последних строк, добавьте -n, например -n 50:
journalctl -u nginx.service -n 50 -fВыход из режима — Ctrl+C.
Шаг 5: Фильтрация по времени
journalctl поддерживает гибкие фильтры по дате и времени. Используйте опции --since и --until:
journalctl --since "2025-01-01 10:00:00" --until "2025-01-01 12:00:00"Можно указывать относительные значения:
journalctl --since "1 hour ago"
journalctl --since today
journalctl --since yesterday --until nowФорматы дат: YYYY-MM-DD HH:MM:SS, today, yesterday, now, а также комбинации вроде -1h, -30min.
Шаг 6: Фильтрация по приоритету
Каждое сообщение имеет уровень важности от 0 (emerg) до 7 (debug). Опция -p позволяет выбрать сообщения с указанным приоритетом и выше:
journalctl -p errВыведет все ошибки и более критические сообщения. Доступные уровни: emerg (0), alert (1), crit (2), err (3), warning (4), notice (5), info (6), debug (7).
Можно комбинировать с фильтром по сервису:
journalctl -u nginx.service -p warningШаг 7: Поиск по содержимому сообщений
Для поиска по тексту используйте -g (grep) с шаблоном. Это чувствительный к регистру поиск по всем полям сообщения:
journalctl -g "error"Если нужно игнорировать регистр, добавьте -i:
journalctl -i -g "timeout"Также можно комбинировать с другими фильтрами:
journalctl -u ssh.service -g "failed"Шаг 8: Просмотр логов за загрузку
journalctl позволяет просматривать логи текущей или предыдущих загрузок системы. Опция -b показывает журнал текущей загрузки:
journalctl -bЧтобы посмотреть предыдущую загрузку, укажите отрицательное смещение:
journalctl -b -1Список всех доступных загрузок:
journalctl --list-bootsЭто полезно для диагностики проблем, возникших после перезагрузки.
Шаг 9: Фильтрация по исполняемому файлу и PID
Если вы знаете путь к исполняемому файлу процесса, используйте _EXE:
journalctl _EXE=/usr/sbin/nginxДля фильтрации по идентификатору процесса — _PID:
journalctl _PID=1234Эти поля можно комбинировать с другими опциями.
Шаг 10: Форматирование вывода
По умолчанию journalctl выводит записи в коротком формате. Опция -o меняет формат вывода. Популярные варианты:
short— стандартный формат (по умолчанию).json— машиночитаемый JSON.json-pretty— JSON с отступами.cat— только сообщение без метаданных.verbose— все поля записи.
Пример:
journalctl -u nginx.service -o json-prettyДля вывода в реальном времени с JSON используйте -f -o json.
Шаг 11: Ограничение количества строк и прокрутка
Опция -n задаёт число последних строк для вывода:
journalctl -n 100Если нужно вывести все записи без пейджера, добавьте --no-pager:
journalctl --no-pager -n 50Это удобно для перенаправления вывода в файл или другую команду.
Шаг 12: Очистка журнала и управление размером
Со временем журнал может занимать много места. Проверить текущий размер:
journalctl --disk-usageОчистить старые записи до определённого размера:
sudo journalctl --vacuum-size=500MИли удалить записи старше определённого срока:
sudo journalctl --vacuum-time=2weeksМожно оставить только определённое количество файлов:
sudo journalctl --vacuum-files=5Шаг 13: Настройка постоянного хранения логов
По умолчанию journald может хранить логи только в оперативной памяти (в /run/log/journal), и они теряются при перезагрузке. Для постоянного хранения включите сохранение на диск:
1. Создайте каталог:
sudo mkdir -p /var/log/journal2. Установите права:
sudo systemd-tmpfiles --create --prefix /var/log/journal3. Перезапустите journald:
sudo systemctl restart systemd-journaldТеперь логи будут сохраняться в /var/log/journal и доступны после перезагрузки.
Шаг 14: Просмотр логов ядра
Для сообщений ядра используйте опцию -k (или --dmesg):
journalctl -kЭто аналог команды dmesg, но с возможностью фильтрации по времени и приоритету.
Типичные ошибки
Забыли указать `.service` — journalctl не найдёт юнит, если имя неполное. Всегда используйте полное имя, например
nginx.service.Недостаточно прав — для просмотра логов некоторых сервисов или системных сообщений может потребоваться
sudo.Логи не сохраняются после перезагрузки — по умолчанию journald хранит данные в памяти. Включите постоянное хранение (шаг 13).
Слишком большой вывод — используйте фильтры по времени, сервису и приоритету, чтобы сузить круг поиска.
Ошибка «Failed to add match» — проверьте синтаксис фильтра, например
_EXEдолжен быть с большой буквы.journalctl не показывает старые логи — возможно, они были удалены из-за ограничения размера. Проверьте настройки в
/etc/systemd/journald.conf.
FAQ
В: Чем journalctl отличается от просмотра файлов в /var/log? О: journalctl предоставляет единый интерфейс к структурированным логам systemd, с мощной фильтрацией и метаданными. Традиционные файлы в /var/log могут содержать логи приложений, не интегрированных с systemd.
В: Как посмотреть логи только за последний час? О: Используйте journalctl --since "1 hour ago".
В: Можно ли экспортировать логи в файл? О: Да, например: journalctl -u nginx.service > nginx.log или с JSON: journalctl -o json > logs.json.
В: Как узнать, какие сервисы пишут в journal? О: Выполните journalctl -F _SYSTEMD_UNIT — команда выведет список всех юнитов, присутствующих в журнале.
В: Что делать, если journalctl показывает «No journal files were found»? О: Проверьте, запущена ли служба systemd-journald, и есть ли права на чтение. Возможно, логи хранятся только в памяти и были очищены.
В: Как настроить ротацию логов? О: Отредактируйте /etc/systemd/journald.conf, параметры SystemMaxUse, SystemMaxFileSize, MaxRetentionSec. После изменений перезапустите journald.
Итог
journalctl — мощный инструмент для работы с логами в systemd. Освоив базовые и продвинутые фильтры, вы сможете быстро диагностировать проблемы сервисов, отслеживать события в реальном времени и эффективно управлять дисковым пространством. Регулярно проверяйте логи, настройте постоянное хранение и не забывайте про очистку, чтобы система работала стабильно.
Читайте также
Комментарии
Комментарии доступны только зарегистрированным пользователям. Войти
- Пока нет комментариев. Будьте первым.



