journalctl

Обновлено 28 июля 2026 · 5 мин чтения

Половина людей выводит весь журнал и грепает его. Так тоже можно, но у journalctl есть индексы, и фильтровать лучше на его стороне.

Основные фильтры

Один сервис, в реальном времени

Прямой аналог tail -f для systemd-юнита.

journalctl -u nginx -f

Промежуток времени

--since и --until понимают и точные даты, и человеческие описания.

journalctl -u app --since "2 hours ago"
journalctl -u app --since "2026-08-30 09:00" --until "2026-08-30 09:30"
journalctl -u app --since yesterday --until today

Только ошибки

-p отбирает по приоритету syslog и включает все уровни выше указанного. err — это ещё и crit, alert, emerg.

journalctl -p err -b
journalctl -p warning -u app --since today

Уровни по возрастанию серьёзности: debug, info, notice, warning, err, crit, alert, emerg.

Что было до перезагрузки

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

journalctl --list-boots
journalctl -b -1 -p err

Ядро отдельно

-k — сообщения ядра, аналог dmesg, но с нормальными временными метками и историей между загрузками.

journalctl -k -b -1 | grep -i 'oom\|killed process'

По процессу или исполняемому файлу

Журнал хранит поля метаданных, по ним можно фильтровать напрямую.

journalctl _PID=1834
journalctl _COMM=sshd --since today
journalctl _UID=1000 -n 50

Формат вывода

Все поля записи

Когда непонятно, по какому полю фильтровать, посмотрите на одну запись целиком.

journalctl -u app -n 1 -o json-pretty

Без пейджера и без обрезки

--no-pager нужен в скриптах, --no-hostname убирает лишнюю колонку на одиночном хосте.

journalctl -u app -n 100 --no-pager --no-hostname

Размер и чистка

Сколько журнал занимает

journalctl --disk-usage

Урезать журнал

Два способа: по возрасту и по размеру. Оба удаляют только архивные файлы, активный не трогают.

journalctl --vacuum-time=7d
journalctl --vacuum-size=500M

Лучше настроить, чем чистить руками. В /etc/systemd/journald.conf есть SystemMaxUse= — задайте его один раз и перезапустите systemd-journald. Разовый vacuum через месяц придётся повторять.

Журнал не переживает перезагрузку

Если после ребута история пуста, журнал держится в памяти. Лечится параметром Storage=persistent в journald.conf либо созданием каталога.

mkdir -p /var/log/journal
systemd-tmpfiles --create --prefix /var/log/journal
systemctl restart systemd-journald

Когда нужен всё-таки grep

Комбинация фильтра и поиска

Сначала сузить журналом, потом искать. Порядок важен: grep по всему журналу читает гигабайты, grep по одному юниту за час — мегабайты.

journalctl -u app --since "1 hour ago" --no-pager | grep -n -C 2 'timeout'
var-log.online — личные заметки по администрированию. Примеры проверены на Debian и Ubuntu.