Перейти к содержимому

journalctl: фильтры и follow

Системный журнал systemd — это первое место, куда нужно смотреть, когда сервис упал или узел начал жрать CPU. journalctl умеет гораздо больше, чем вывести весь лог подряд: фильтровать по юнитам, приоритетам, временным окнам и читать в реальном времени. Ниже — рабочий набор, который я использую ежедневно.

Follow in real time

Поведение, аналогичное tail -f, но с учётом структурированного формата journald:

journalctl -f

Флаг -f (short for --follow) выводит новые записи по мере их появления. По умолчанию показывает все юниты — удобно, когда не знаешь, где именно горит.

Подсказка

Добавь --no-pager, чтобы вывод не перехватывался less и не блокировал терминал в скриптах и CI.

journalctl -f --no-pager

Filter by unit

Юнит — самый частый фильтр. Один ключ -u и конкретное имя сервиса:

journalctl -u nginx.service
journalctl -u docker.service

Можно передать несколько юнитов — journalctl покажет записи из всех указанных:

journalctl -u nginx.service -u postgresql.service
Примечание

Имя юнита указывается с суффиксом .service. Если забыть суффикс, journalctl может не найти совпадений или выдать неожиданный результат.

Priority and time filters

Фильтр по приоритету задаётся через -p (или --priority). Уровни от 0 до 7:

ПриоритетЗначение
0emerg
1alert
2crit
3err
4warning
5notice
6info
7debug

Показать только ошибки и критические:

journalctl -p err

Временные окна — через --since и --until. Поддерживаются абсолютные даты и относительные выражения:

journalctl --since "1 hour ago"
journalctl --since today --until "2 hours ago"
journalctl --since "2025-01-15 08:00:00" --until "2025-01-15 12:00:00"
Предупреждение

--since без --until показывает от указанного момента до настоящего. Если указать оба — окно закрытое. Проверяй порядок дат, иначе получишь пустой вывод.

Combining flags

В реальной работе фильтры комбинируют. Типичный запрос — смотреть ошибки конкретного сервиса за последний час в реальном времени:

journalctl -u nginx.service -p err --since "1 hour ago" -f --no-pager

Ещё один частый паттерн — вывод последних N строк по юниту с фильтром приоритета:

journalctl -u postgresql.service -p warning -n 100 --no-pager

Здесь -n 100 ограничивает вывод последними 100 записями.

Сводка по ключам из повседневного арсенала:

ФлагНазначение
-u <unit>Фильтр по юниту
-fFollow (новые записи в реальном времени)
-p <level>Минимальный приоритет
--since <time>Начало временного окна
--until <time>Конец временного окна
-n <count>Последние N записей
--no-pagerБез постраничника
Подсказка

Если journalctl выдаёт пустой результат без ошибок — проверь, не переведён ли сервис в inactive или failed. Статус можно увидеть через systemctl status <unit>. Также убедись, что journald не ротировал нужные записи: journalctl --disk-usage покажет, сколько места занимает журнал.