journalctl — утилита для чтения и анализа журналов systemd-journal. Позволяет фильтровать записи по сервисам, приоритетам, времени, PID, UID и многим другим полям, а также диагностировать проблемы служб в production.
Основные концепции
- journal — двоичный журнал systemd, объединяющий логи ядра, systemd и пользовательских сервисов.
- units logging — systemd направляет stdout/stderr сервисов напрямую в журнал.
- fields — каждая запись содержит множество метаданных (MESSAGE, PRIORITY, _PID, _SYSTEMD_UNIT, _BOOT_ID и др.).
- persistence — по умолчанию может быть только in-memory; для долговременного хранения требуется /var/log/journal.
- rate-limiting — journal может дропать сообщения при флуде; это тоже диагностируется.
Структура / состав
- каталоги журналов:
/run/log/journal(volatile),/var/log/journal(persistent). - бинарные файлы журналов:
system.journal,user-*.journal. - поля записи (metadata fields):
_SYSTEMD_UNIT,_PID,_COMM,PRIORITY,MESSAGE,_BOOT_ID. - конфигурация journald:
/etc/systemd/journald.confи drop-in файлы. - выходные форматы: текст, JSON, JSON-pretty, export (монолитный поток).
Минимальные рабочие примеры
# Логи сервиса за текущую загрузку
journalctl -u myapp.service -b
# Логи за последние 30 минут
journalctl --since "30 min ago"
# Просмотр логов в реальном времени
journalctl -u myapp.service -f
# Фильтрация по приоритету (0–7)
journalctl -p err..alert
# Фильтрация по PID
journalctl _PID=1234
# JSON вывод
journalctl -u myapp.service -o json-pretty
# Логи предыдущей загрузки
journalctl -b -1 -u myapp.service# Пример расширенного запроса: ошибки сервиса за последние 2 часа,
# только MESSAGE и PRIORITY
journalctl -u myapp.service \
--since "2 hours ago" \
-p err \
-o verbose# Проверка структуры файла журнала
journalctl --verifyТипичные операции / кейсы
- просмотр логов сервиса:
journalctl -u myapp.service -bjournalctl -u myapp.service -f
- анализ падения процесса:
journalctl -u myapp.service -p errjournalctl -t <tag>если приложение логирует syslog-тегами
- поиск проблем при старте:
- фильтрация
--since "5 min ago"сразу после рестарта сервиса
- фильтрация
- диагностика предыдущей загрузки:
journalctl -b -1 -u myapp.service
- работа с PID:
journalctl _PID=$(pidof myapp)
- анализ ядра:
journalctl -k -p err
- отлов флудящих сервисов:
journalctl -u myapp.service --no-pager | wc -l+ анализ rate-limiting
- экспорт логов:
journalctl -u myapp.service --since yesterday > logs.txt
- централизованное логирование:
- настройка
ForwardToSyslog=yesили использование gateway.
- настройка
Диагностика / ошибки
- Логи не сохраняются после перезагрузки — проверить наличие
/var/log/journal(нужна persistent storage), владельца и права. - Пропадают сообщения — возможно сработало rate-limiting; проверить
systemd-journaldзаписи (MESSAGE_ID=fc2e22bc6ee647b6b90729ab34a250b1указывает на drop). - journalctl показывает “File corruption detected” — проверить
journalctl --verify, очистить повреждённые файлы, убедиться в корректной работе диска (smartctl,dmesg). - Логи сервиса не видны — проверить, что сервис пишет в stdout/stderr (если пишет в файл — journal его не увидит), проверить
StandardOutput/StandardError. - Нет логов ядра — проверить
kernel.printkи что journald собирает сообщения (journalctl -k). - journalctl медленный — большой объем persistent-журналов; очистить старые (
vacuum-time,vacuum-size) или настроить ограничения вjournald.conf. - Ошибки прав доступа — убедиться, что пользователь входит в группу
systemd-journalили использовать sudo.
Дополнительные материалы
- man-страницы:
man journalctl,man systemd.journal-fields,man journald.conf - документация: https://www.freedesktop.org/software/systemd/man/journalctl.html