linux-labs

Вики / Логи и аудит

journalctl

Команда Ubuntu 24.04 · systemd 255 ЛогиСлужбыsystemd

Чтение журнала systemd (journald) — фильтры по службе, времени, приоритету.

journalctl читает централизованный журнал systemd (journald) — туда попадает stdout/stderr служб, сообщения ядра и syslog. Журнал структурирован: можно фильтровать по службе, времени, приоритету, загрузке, PID, полю.

По умолчанию в Ubuntu журнал может быть не persistent (теряется при ребуте). Включить хранение на диске:

sudo mkdir -p /var/log/journal && sudo systemctl restart systemd-journald
journalctl -u nginx               # записи службы nginx
journalctl -u nginx -f            # следить в реальном времени (как tail -f)
journalctl -u nginx --since "10 min ago"
journalctl -xeu nginx             # хвост + пояснения (x) при разборе сбоя
journalctl -p err -b              # только ошибки за текущую загрузку
journalctl -k                     # сообщения ядра (= dmesg)
journalctl --since today --until "1 hour ago"
journalctl -b -1                  # журнал ПРЕДЫДУЩЕЙ загрузки (что было до ребута)
journalctl -g 'pattern'           # grep по сообщениям (регэксп)
journalctl --disk-usage           # сколько занимает
sudo journalctl --vacuum-time=7d  # подчистить старше 7 дней
Флаг Смысл
-u <unit> только эта служба
-f / -e follow / сразу к концу
-x пояснения к сообщениям
-p <prio> приоритет: emerg..debug (или err, warning)
-b [N] за текущую (или N-ю) загрузку
-k сообщения ядра
-g RE grep по тексту
-o <fmt> формат: short, json, json-pretty, cat, verbose
--since/--until временной диапазон

Фильтр по структурным полям (без службы):

journalctl _PID=1234              # по PID
journalctl _COMM=sshd             # по имени процесса
journalctl _UID=1000 --since today
journalctl _SYSTEMD_UNIT=ssh.service -p warning
journalctl -o json-pretty -u nginx -n 1   # все поля одной записи
journalctl --user -u myapp        # пользовательская служба

Журнал пустой после ребута

journald не persistent. Создай /var/log/journal (см. «Обзор»). journalctl -b -1 тогда покажет прошлую загрузку.

Диск забит журналом

journalctl --disk-usage, затем --vacuum-time=7d или --vacuum-size=500M. Постоянный лимит — /etc/systemd/journald.conf (SystemMaxUse=500M).

Нужны логи конкретного сбоя

journalctl -xeu <unit> --since "5 min ago" — самый частый диагностический запрос (см. systemctl).

Время в журнале «не то»

journald пишет в UTC внутри, показывает в локальной TZ. Сверь timedatectl; journalctl --utc для UTC.

Логи службы идут и в /var/log (дубли)

journald + rsyslog могут дублировать. Где смотреть — rsyslog (текстовые файлы) vs journalctl (структурно по -u).

journalctl -u SVC -f              # хвост логов службы
journalctl -xeu SVC               # разбор сбоя
journalctl -p err -b ; journalctl -k    # ошибки за загрузку / ядро
journalctl _COMM=sshd -g fail     # по процессу + grep
journalctl -b -1                  # прошлая загрузка
journalctl --vacuum-time=7d       # чистка

См. также