Коротко о journalctl в Linux

Для просмотра логов сервиса или системы можно воспользоваться утилитой journalctl. Системный журнал хранится в /var/log/journal/ (если включено постоянное хранение).

Основные опции journalctl

Просмотр логов

journalctl                      # Все логи (с самого начала)
journalctl -e                   # Показать конец журнала
journalctl -f                   # Следить за новыми записями (как tail -f)
journalctl -n [число]           # Последние N записей (по умолчанию 10)
journalctl --since "2024-01-15" # Логи с указанной даты
journalctl --since "1 hour ago" # Логи за последний час
journalctl --until "yesterday"  # Логи до указанного времени

Фильтрация по службам

journalctl -u nginx.service     # Логи конкретной службы
journalctl -u docker -f         # Следить за логами службы
journalctl _SYSTEMD_UNIT=sshd   # Логи по идентификатору unit

Фильтрация по приоритету

journalctl -p err               # Только ошибки
journalctl -p warning           # Предупреждения и выше
journalctl -p info              # Информационные сообщения и выше

По идентификаторам

journalctl _PID=1234            # Логи по PID процесса
journalctl _UID=1000            # Логи по UID пользователя
journalctl /usr/bin/bash        # Логи по пути к исполняемому файлу

Формат вывода

journalctl -o verbose           # Подробный вывод со всеми полями
journalctl -o json              # Вывод в JSON формате
journalctl -o json-pretty       # Читаемый JSON
journalctl -o cat               # Только сообщения без метаданных
journalctl -o short             # Короткий формат (по умолчанию)

Управление журналом journalctl

journalctl --disk-usage         # Показать размер журнала
journalctl --vacuum-size=500M   # Очистить журнал до указанного размера
journalctl --vacuum-time=2weeks # Удалить записи старше 2 недель
journalctl --rotate             # Принудительный ротация журнала

Ключевые опции отладки

journalctl -b                   # Логи текущей загрузки
journalctl -b -1                # Логи предыдущей загрузки
journalctl -k                   # Только сообщения ядра (dmesg)
journalctl -x                   # Добавить пояснения к сообщениям
journalctl --list-boots         # Показать список всех загрузок

Комбинированные примеры

# Логи службы за последние 2 часа с приоритетом ошибка
journalctl -u apache --since "2 hours ago" -p err

# Отслеживать логи с объяснениями
journalctl -fx

# Логи за сегодня для конкретного пользователя
journalctl _UID=1000 --since today

# JSON вывод последних 5 ошибок
journalctl -p err -n 5 -o json

Экспорт логов в journalctl:

journalctl -o json > logs.json

Мониторинг в реальном времени:

journalctl -f -u service-name

Горячие клавиши в journalctl

Навигация:

↓, ↑ или j, k — прокрутка строк
PgDown, PgUp или Space, b — страница вниз/вверх
End, Home или G, g — в конец/начало журнала
d, u — полстраницы вниз/вверх

Поиск и фильтрация в journalctl:

/ — поиск вперёд (с текущей позиции)
? — поиск назад
n — следующее совпадение
N — предыдущее совпадение
/ + Enter — повторить последний поиск
& — фильтр по указанному условию (требует указания поля)

Просмотр логов:

F — следить за журналом (как tail -f)
Ctrl+C — остановить слежение
e — перейти к концу (прокрутить)
f — перейти вперёд на одну страницу

Отображение:

o — показать/скрыть поля журнала

x — выделить важные сообщения цветом

r — переключить обратный порядок (с конца)

z — показать/скрыть выделение строк

Системные и выход:

h, ? (в некоторых версиях) — справка

q — выход из просмотрщика

Полезные команды запуска в journalctl

journalctl -f                # следить за логами в реальном времени
journalctl -e                # сразу перейти к концу
journalctl -u service_name   # логи конкретного сервиса
journalctl --since today     # логи за сегодня
journalctl -p err            # только ошибки
journalctl -b                # логи текущей загрузки
journalctl -b -1             # логи предыдущей загрузки

Просмотр логов системных служб

Самый частый случай использования journalctl — просмотр логов системных служб (systemd units). Типичная команда:

journalctl -u nginx.service -f

Команда будет в реальном времени отображать новые записи журнала для службы nginx. Опция -f (от —follow) — самая важная часть команды. Она заставляет journalctl показывать последние несколько строк лога, а затем следить за ним в реальном времени, выводя все новые сообщения по мере их появления.

Опция -u nginx.service — указывает отфильтровать логи только для конкретной службы (в данном случае службы nginx).

Фильтр по дате в journalctl

С помощью опции —since вы можете фильтровать дату и время:

sudo journalctl --since "2025-09-20 15:10:10"

Команда начинает отображать логи с 2025-09-20 15:10:10. Или можно просто вывести логи за сегодня:

journalctl -u nginx.service --since today

Чтобы ограничить вывод и по конечной дате, используется параметр --until:

journalctl --since "2025-01-20" --until "2025-01-21"   #Логи за весь день 20 января

Помимо даты в формате YYYY-MM-DD и опции today можно использовать yesterday и tomorrow. Также можно использовать конструкции 1 day ago (1 день назад) или 3 hours ago (3 часа назад).

Вывод сообщений ядра (kernel)

Если нужно посмотреть только сообщения ядра, то можно использовать опцию -k:

sudo journalctl -ek

-k или —dmesg — показывает только сообщения ядра (kernel). Это очень важно для диагностики проблем с драйверами, оборудованием (жесткие диски, видеокарты, USB), файловыми системами.

-e или —pager-end — сразу перематывает вывод в конец журнала (к самым свежим сообщениям) и открывает его в постраничном просмотрщике (обычно less).

Настройка формата вывода в journalctl

По умолчанию команда journalctl отображает логи в less для удобной навигации. Формат вывода можно изменить:

short - используется по умолчанию;
verbose - также, как и short, только выводится намного больше информации;
json - вывод в формате json, одна строка лога в одной строке вывода;
json-pretty - форматированный вывод json для более удобного восприятия;
cat - отображать только сообщения, без метаданных.

Для указания формата используйте опцию -o:

journalctl -u nginx -o json-pretty

Покажет логи только службы nginx в отформатированном JSON.

-u nginx (—unit=nginx) — фильтр по юниту (службе) systemd с именем nginx.

-o json-pretty — вывод в читаемом JSON-формате.

Пример вывода команды:

{
  "__CURSOR" : "s=abc123...",
  "__REALTIME_TIMESTAMP" : "1678886402123456",
  "__MONOTONIC_TIMESTAMP" : "1234567890",
  "_BOOT_ID" : "a1b2c3d4...",
  "PRIORITY" : 6,
  "_UID" : 0,
  "_GID" : 0,
  "_SYSTEMD_UNIT" : "nginx.service",
  "_MACHINE_ID" : "e5f6g7h8...",
  "_HOSTNAME" : "server-host",
  "MESSAGE" : "nginx started successfully.",
  "SYSLOG_IDENTIFIER" : "nginx",
  "SYSLOG_PID" : 1234,
  "MESSAGE_ID" : "9d...",
  "_SOURCE_REALTIME_TIMESTAMP" : "1678886402123456"
}

Очистка логов в journalctl

Просмотр текущего использования диска:

sudo journalctl --disk-usage

Очистка по времени. Удалить логи старше X дней:

# Удалить логи старше 2 дней
sudo journalctl --vacuum-time=2d

# Другие варианты времени
sudo journalctl --vacuum-time=1h    # 1 час
sudo journalctl --vacuum-time=1w    # 1 неделя
sudo journalctl --vacuum-time=1month # 1 месяц

Если вы хотите, чтобы файлы журналов занимали на диске не более 2 Гб:

sudo journalctl --vacuum-size=2G
sudo journalctl --vacuum-size=100M   #Или в мб

Ограничить размер отдельных журналов:

sudo journalctl --vacuum-files=5    # Оставить только 5 файлов

Для полной очистки всех логов в journalctl можно воспользоваться командой:

sudo journalctl --vacuum-time=1s

В этой статье мы разобрали краткие моменты использования journalctl в Linux.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *