Анализ логов с помощью journalctl. От простого grep до продвинутых фильтров

6 минут чтения
Средний рейтинг статьи — 4.8

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 — alert
  • 2 — crit
  • 3 — err
  • 4 — warning
  • 5 — notice
  • 6 — info
  • 7 — 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, вы сможете быстрее находить ошибки, отслеживать работу сервисов и строить автоматические системы мониторинга.

6 минут чтения
Средний рейтинг статьи — 4.8

Настроить мониторинг за 30 секунд

Надежные оповещения о даунтаймах. Без ложных срабатываний