journalctl: фильтры и follow
Системный журнал systemd — это первое место, куда нужно смотреть, когда сервис упал или узел начал жрать CPU. journalctl умеет гораздо больше, чем вывести весь лог подряд: фильтровать по юнитам, приоритетам, временным окнам и читать в реальном времени. Ниже — рабочий набор, который я использую ежедневно.
Follow in real time
Поведение, аналогичное tail -f, но с учётом структурированного формата journald:
Флаг -f (short for --follow) выводит новые записи по мере их появления. По умолчанию показывает все юниты — удобно, когда не знаешь, где именно горит.
Добавь --no-pager, чтобы вывод не перехватывался less и не блокировал терминал в скриптах и CI.
Filter by unit
Юнит — самый частый фильтр. Один ключ -u и конкретное имя сервиса:
Можно передать несколько юнитов — journalctl покажет записи из всех указанных:
Имя юнита указывается с суффиксом .service. Если забыть суффикс, journalctl может не найти совпадений или выдать неожиданный результат.
Priority and time filters
Фильтр по приоритету задаётся через -p (или --priority). Уровни от 0 до 7:
| Приоритет | Значение |
|---|---|
| 0 | emerg |
| 1 | alert |
| 2 | crit |
| 3 | err |
| 4 | warning |
| 5 | notice |
| 6 | info |
| 7 | debug |
Показать только ошибки и критические:
Временные окна — через --since и --until. Поддерживаются абсолютные даты и относительные выражения:
--since без --until показывает от указанного момента до настоящего. Если указать оба — окно закрытое. Проверяй порядок дат, иначе получишь пустой вывод.
Combining flags
В реальной работе фильтры комбинируют. Типичный запрос — смотреть ошибки конкретного сервиса за последний час в реальном времени:
Ещё один частый паттерн — вывод последних N строк по юниту с фильтром приоритета:
Здесь -n 100 ограничивает вывод последними 100 записями.
Сводка по ключам из повседневного арсенала:
| Флаг | Назначение |
|---|---|
-u <unit> | Фильтр по юниту |
-f | Follow (новые записи в реальном времени) |
-p <level> | Минимальный приоритет |
--since <time> | Начало временного окна |
--until <time> | Конец временного окна |
-n <count> | Последние N записей |
--no-pager | Без постраничника |
Если journalctl выдаёт пустой результат без ошибок — проверь, не переведён ли сервис в inactive или failed. Статус можно увидеть через systemctl status <unit>. Также убедись, что journald не ротировал нужные записи: journalctl --disk-usage покажет, сколько места занимает журнал.