Вики / Логи и аудит
journalctl
Чтение журнала 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 # чистка