journalctl: как читать журнал systemd при разборе сбоя
Программа для чтения журнала systemd. Журнал хранится в двоичном виде и содержит не только текст сообщений, но и поля: имя unit, приоритет, номер процесса, идентификатор загрузки.
Что делает
Для разбора сбоя достаточно нескольких ключей. -u имя ограничивает вывод одной службой, -x добавляет пояснения systemd, -e перематывает в конец, -b показывает текущую загрузку, -p err оставляет только ошибки.
Возможность фильтровать по полям отличает журнал systemd от обычных файлов: journalctl _PID=1234 или journalctl SERVICE_ENV=prod работают точно, без разбора текста регулярными выражениями.
Где ставится. Команда в терминале. Настройки журнала — в /etc/systemd/journald.conf.
Значения
| Значение | Что происходит |
|---|---|
journalctl -xeu имя | журнал службы с пояснениями, с конца: основная команда разбора. |
journalctl -u имя --since "10 min ago" | за последние десять минут. |
journalctl -b -p err | ошибки текущей загрузки. |
journalctl -k | сообщения ядра. |
journalctl -f -u имя | следить за журналом в реальном времени. |
journalctl -g "шаблон" | поиск по регулярному выражению. |
journalctl --disk-usage | сколько места занимает журнал. |
Пример
Порядок при разборе упавшей службы.
systemctl status myapp.service -l --no-pager
journalctl -xeu myapp.service --no-pager -n 100
journalctl -u myapp.service --since "1 hour ago" -p warning --no-pager
journalctl -k -b --no-pager | tail -30
Ключ --no-pager нужен, когда вывод идёт в файл или в другую программу: без него journalctl запускает постраничный просмотр.
Типичные ошибки
Ключ -p err скрывает сообщения ниже уровня ошибки: трассировки и подсказки часто идут с уровнем info.
Если журнал не постоянный (нет каталога /var/log/journal), после перезагрузки прежние записи недоступны.
Служба, пишущая в собственный файл, в журнале почти ничего не оставит: смотрите её файл.
Ограничение размера журнала может привести к потере старых записей раньше, чем вы их прочтёте.
Связанные ошибки
- status=1/FAILURE в systemdКод 1/FAILURE означает, что программа запустилась и сама завершилась с ошибкой. Как найти настоящую причину в журнале службы.
- Failed with result 'exit-code'Состояние exit-code: служба завершилась с ненулевым кодом. Что это сообщение значит и где искать настоящую причину.
- No space left on device в журнале службыНет места на устройстве: разбор по свободным блокам, по inode, по журналу systemd и по удалённым, но открытым файлам.
Рядом стоящие параметры
Источники
- journalctl(1)
- journald.conf(5)
- Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)