С чего начать Первые шаги трек · 15 ступеней
Linux Labs

journalctl — логи и журнал systemd

4 мин Ubuntu 24.04 · systemd 255

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

Шпаргалка

7 команд Версия для печати
  • journalctl -u nginx -f хвост логов службы
  • journalctl -xeu nginx разбор сбоя
  • journalctl -p err -b ошибки за текущую загрузку
  • journalctl -k сообщения ядра
  • journalctl _COMM=sshd -g fail по процессу + совпадение в тексте
  • journalctl -b -1 прошлая загрузка
  • journalctl --vacuum-time=7d чистка

Обзор

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

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

bash
sudo mkdir -p /var/log/journal && sudo systemctl restart systemd-journald

Ключи

14
Флаг Смысл
-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 временной диапазон

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

bash
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        # пользовательская служба
Ключ Что делает Пример
-u --unit unit Только записи указанной службы (юнита). journalctl -u nginx
-f --follow Следить за журналом в реальном времени, как tail -f. journalctl -u nginx -f
-p --priority priority Только записи с этим или более высоким приоритетом (err, warning, …). journalctl -p err -b
-b --boot ID|+-N Записи текущей загрузки; со смещением — другой загрузки (-1 — предыдущая). journalctl -b -1
--since date Начало временного диапазона. journalctl --since "1 hour ago"
--until date Конец временного диапазона. journalctl --until today
-e --pager-end Сразу перейти к концу журнала. journalctl -eu nginx
-x --catalog Добавить пояснения к сообщениям, если они есть в каталоге. journalctl -xeu nginx
-k --dmesg Только сообщения ядра (аналог dmesg). journalctl -k
-g --grep pattern Показать только записи, совпадающие с регулярным выражением. journalctl -g 'fail'
-o --output format Формат вывода — short, json, json-pretty, cat, verbose и другие. journalctl -o json-pretty -u nginx -n 1
-t --identifier tag Только записи с этой меткой (имя программы или logger -t). journalctl -t cleanup
--disk-usage Сколько места занимает журнал на диске. journalctl --disk-usage
--vacuum-time time Удалить записи старше указанного срока. опасно journalctl --vacuum-time=7d

Ничего не найдено. Попробуй запрос короче.

Рецепты

2

Команды

bash
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 дней

Свои строки в журнале: logger и -t

text
student@ubuntu:~$ logger -t cleanup "removed 3 files"
student@ubuntu:~$ journalctl -t cleanup --no-pager -n 2
Oct 20 10:50:48 ubuntu cleanup[1143]: removed 3 files

logger -t метка пишет строку в журнал от имени метки, journalctl -t метка показывает только её. Вывод скрипта, запущенного службой, идёт с меткой по имени скрипта: journalctl -t clean.sh. Без групп adm или systemd-journal student видит только свои записи — чужие и системные читай через sudo.

Неполадки

5

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

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).

См. также

  • systemctl — Управление службами systemd — start/stop/restart/status/enable/reload.
  • systemd — Init-система и менеджер служб (PID 1): юниты, цели, зависимости, журналы.
Загрузка…