Для просмотра логов сервиса или системы можно воспользоваться утилитой 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.