Анализ логов с помощью 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 -1
4. Проблемы с сетью
Ошибки сетевых интерфейсов за последние сутки:
journalctl -k --since "1 day ago" | grep -i "eth"
5. Мониторинг в реальном времени
Слежка за конкретным сервисом, чтобы видеть сразу ошибки:
journalctl -u php8.2-fpm.service -f -p warning
6. Кто перезапускал сервисы
События systemd об управлении юнитами (старт/стоп/рестарт):
journalctl -u nginx.service | grep "Starting"
journalctl -u nginx.service | grep "Stopped"
7. Системные сбои ядра
journalctl -k -p err
Итог
journalctl
— это мощный инструмент, который может заменить десятки костылей с grep
, less
и ручным просмотром логов.
Он поддерживает фильтрацию по времени, сервисам, приоритетам, процессам и даже экспорт в разные форматы.
Освоив journalctl
, вы сможете быстрее находить ошибки, отслеживать работу сервисов и строить автоматические системы мониторинга.
Настроить мониторинг за 30 секунд
Надежные оповещения о даунтаймах. Без ложных срабатываний