Анализ логов с помощью journalctl. От простого grep до продвинутых фильтров
journalctl — это инструмент для работы с журналом systemd. В отличие от старого /var/log/syslog, он хранит логи в бинарной базе данных и предоставляет удобные фильтры для поиска и анализа.
С помощью journalctl можно быстро находить ошибки, следить за сервисами в реальном времени и даже сохранять логи в отдельные файлы для последующего анализа.
Базовое использование
Вывести все логи (огромный список, поэтому обычно комбинируется с фильтрацией):
journalctlОграничить вывод последними 50 строками:
journalctl -n 50Следить за логами в реальном времени (аналог tail -f /var/log/syslog):
journalctl -fФильтрация по времени
Показать логи с начала сегодняшнего дня:
journalctl --since todayС определённого времени:
journalctl --until "2025-09-01 18:00:00"Диапазон:
journalctl --since "2025-09-01 10:00:00" --until "2025-09-01 12:00:00"Фильтрация по сервисам
Посмотреть логи конкретного юнита systemd (например, nginx.service):
journalctl -u nginx.serviceТолько последние записи и слежение в реальном времени:
journalctl -u nginx.service -f -n 50Несколько сервисов сразу:
journalctl -u nginx.service -u php8.2-fpm.serviceФильтрация по приоритетам
Уровни приоритетов (syslog priority):
0— emerg (система неработоспособна)1— alert2— crit3— err4— warning5— notice6— info7— debug
Пример: только ошибки и выше:
journalctl -p errИли диапазон:
journalctl -p warning..err
Комбинирование с grep
Хотя у journalctl есть свои фильтры, иногда проще использовать grep:
journalctl -u ssh.service | grep "Failed password"Просмотр логов определённого процесса или пользователя
По PID:
journalctl _PID=1234По UID:
journalctl _UID=1000По имени команды:
journalctl _COMM=sshdЭкспорт логов
Сохранить логи в файл для передачи:
journalctl -u nginx.service --since today > nginx.logЭкспортировать в бинарном виде (для анализа на другой системе):
journalctl --since today -u nginx.service -o export > nginx.binЗагрузить бинарный лог обратно:
journalctl --file=nginx.binПродвинутые фильтры
Комбинация фильтров (только ошибки nginx за сегодня):
journalctl -u nginx.service -p err --since todayИсключение записей (-g в новых версиях):
journalctl -g "timeout" --invert-matchКрасивый вывод в JSON (для парсинга в скриптах):
journalctl -u nginx.service -o json-prettyТиповые сценарии для админов
1. Ошибки входа по SSH
Очень частая задача — проверить, кто и как ломился на сервер:
journalctl -u ssh.service -p errТолько неудачные попытки авторизации:
journalctl -u ssh.service | grep "Failed password"2. Падения сервисов
Посмотреть, почему перезапустился конкретный сервис:
journalctl -u nginx.service --since -1h -p errИли все записи systemd о перезапусках:
journalctl -b -1 -u systemd --grep="failed"3. Анализ после ребута
Посмотреть только логи последней загрузки:
journalctl -bПредыдущей загрузки:
journalctl -b -14. Проблемы с сетью
Ошибки сетевых интерфейсов за последние сутки:
journalctl -k --since "1 day ago" | grep -i "eth"5. Мониторинг в реальном времени
Слежка за конкретным сервисом, чтобы видеть сразу ошибки:
journalctl -u php8.2-fpm.service -f -p warning6. Кто перезапускал сервисы
События systemd об управлении юнитами (старт/стоп/рестарт):
journalctl -u nginx.service | grep "Starting"
journalctl -u nginx.service | grep "Stopped"7. Системные сбои ядра
journalctl -k -p errИтог
journalctl — это мощный инструмент, который может заменить десятки костылей с grep, less и ручным просмотром логов.
Он поддерживает фильтрацию по времени, сервисам, приоритетам, процессам и даже экспорт в разные форматы.
Освоив journalctl, вы сможете быстрее находить ошибки, отслеживать работу сервисов и строить автоматические системы мониторинга.
Настроить мониторинг за 30 секунд
Надежные оповещения о даунтаймах. Без ложных срабатываний