Чтение и анализ журналов systemd с помощью journalctl
journalctl — стандартный инструмент для чтения журналов, которые собирает служба journald (часть systemd). Он позволяет фильтровать записи по юнитам, pid/uid, времени, приоритету и формату вывода. Для полного доступа к системным журналам запускайте команды с sudo; при необходимости включите постоянное хранение в /var/log/journal.
Важно: по умолчанию journald может хранить логи в оперативной памяти — они не переживут перезагрузку, если не настроено постоянное хранилище.

Что такое journald?
Journald — это системная служба логирования, входящая в состав systemd. Она агрегирует структурированные сообщения (журналы) от ядра, системных служб и пользовательских процессов в бинарный журнал. Коротко:
- Что это в одной строке: бинарный, индексируемый журнал сообщений событий для Linux под управлением systemd.
- Где хранится: в оперативной памяти по умолчанию; при включении постоянства — в каталоге /var/log/journal.
- Почему важно: удобная фильтрация и структурированные поля облегчают поиск и автоматизацию анализа.
Основные понятия
- Systemd — системный менеджер инициализации и сервисов в современных дистрибутивах Linux.
- journald — подсистема логирования systemd.
- journalctl — клиент для чтения и фильтрации данных journald.
Как работает journalctl
journalctl читает индексируемый бинарный журнал, который journald поддерживает в актуальном состоянии. Команда использует в фоне программу просмотра less, поэтому навигация и поведенческие паттерны знакомы многим пользователям.
Примеры навигации в просмотрщике: F — переход в режим «следить», B — прокрутка назад, q — выйти.
Доступ и права
journalctl выводит все записи только если у пользователя есть соответствующие права. Для системного исследования используйте sudo:
sudo journalctlЕсли вы работаете от обычного пользователя и не видите нужных записей, запросите повышение прав или настройте доступ с помощью групп systemd-journal (зависит от дистрибутива).
Просмотр всех записей
Чтобы показать весь журнал в хронологическом порядке:
sudo journalctlЧтобы показать последние записи сверху (обратный порядок):
sudo journalctl -rПросмотр логов ядра
Информация от ядра часто нужна при анализе сбоев и проблем загрузки. Для вывода только сообщений ядра используйте:
sudo journalctl -kВывод включает метки ядра и связанные сообщения, например, ошибки модулей и предупреждения при загрузке.
Фильтрация по сервису, PID, UID, времени и приоритету
journalctl поддерживает гибкую фильтрацию по полям и параметрам.
- По юниту (systemd service):
sudo journalctl -u cron- По PID, UID или GID (пример для root):
sudo journalctl _UID=0- Просмотр логов в реальном времени (аналог tail -f):
sudo journalctl -fНажмите Ctrl+C, чтобы выйти из режима «следить».
- По времени (с и до):
sudo journalctl --since=yesterday
sudo journalctl --since="2021-07-17 12:00:00" --until="2021-07-17 15:00:00"- По приоритету (уровню): от самых серьёзных (emerg) до отладочных (debug):
sudo journalctl -p errСокращённые уровни: emerg, alert, crit, err, warning, notice, info, debug.
Форматы вывода
По умолчанию вывод читается как текст. Для машинной обработки есть форматы JSON и др.:
sudo journalctl -o json-prettyДругие форматы: short, short-iso, verbose, export, json и т.д. Формат json-pretty удобен для дальнейшей передачи в анализаторы или SIEM.
Экспорт и сохранение выборки
Чтобы сохранить выборку в файл (текстовом или JSON):
sudo journalctl -u nginx --since=today -o json > /tmp/nginx-today.json
sudo journalctl --since="1 hour ago" > /tmp/recent.logДля переноса бинарного журнала используйте режим экспорта/импорта systemd-journal:
sudo journalctl --rotate
sudo journalctl --vacuum-time=7d
sudo journalctl --output=export > /tmp/journal-archive.exportКонфигурация journald
Файл конфигурации:
/etc/systemd/journald.confКлючевые параметры (кратко):
- Storage — auto/volatile/persistent/none. persistent включает запись в /var/log/journal.
- SystemMaxUse, RuntimeMaxUse — лимиты по использованию диска/памяти для журнала.
- MaxRetentionSec — максимальное время хранения.
Если вы хотите, чтобы логи сохранялись между перезагрузками, установите Storage=persistent и создайте каталог /var/log/journal с подходящими правами.
Практический метод расследования (мини-методология)
- Сбор: определить время инцидента и юниты, которые могли участвовать.
- Фильтрация: сузить выборку по –since/–until, -u, -p или полям _PID/_UID.
- Контекст: посмотреть логи ядра (-k) и предыдущие загрузки (-b, -b -1).
- Экспорт: сохранить результаты в json-pretty для командной обработки.
- Корреляция: сопоставить с другими источниками (syslog, /var/log, мониторинг).
Пример: искать отказ сервиса за последние 2 часа:
sudo journalctl -u myservice --since "2 hours ago" -p errРолевые чек-листы
Администратор:
- Проверить Storage в /etc/systemd/journald.conf.
- Убедиться, что /var/log/journal существует (если нужен persistent).
- Настроить вакуумирование и лимиты (SystemMaxUse).
Разработчик:
- Логировать структурированные поля (_PID, _COMM, MESSAGE).
- Тестировать локально с journalctl -f при разработке сервисов.
Инженер безопасности:
- Включить постоянный журнал для аудита.
- Ограничить доступ к журналу, использовать безопасную передачу в SIEM.
Когда journalctl не поможет — альтернативы и ограничения
- Некоторые дистрибутивы или старые системы не используют systemd/journald; там остался rsyslog/syslog-ng.
- Если journald настроен как volatile (в памяти), логи после перезагрузки потеряются.
- Для долгосрочного хранения, поиска по большим объёмам и аналитики лучше использовать централизованные системы (ELK/Elastic, Graylog, Splunk, Fluentd).
Альтернативные подходы:
- rsyslog/syslog-ng для текстовых логов в /var/log.
- Forwarding journald -> rsyslog -> централизованный стек логирования.
Частые ошибки и советы по устранению
- Не видно нужных записей: проверьте права и запустите с sudo.
- Журналы быстро заполняют диск: настройте SystemMaxUse/RuntimeMaxUse и vacuum-политику.
- Потеря данных после перезагрузки: включите Storage=persistent и создайте /var/log/journal.
Критерии приёмки
- Можно вывести все логи командой sudo journalctl.
- Можно отфильтровать логи по юниту, времени и приоритету.
- Логи сохраняются между перезагрузками, если Storage=persistent настроен и /var/log/journal доступен.
Быстрый справочник (cheat sheet)
- Показать последние 100 строк: sudo journalctl -n 100
- Следить за логом сервиса: sudo journalctl -u ssh -f
- Просмотр логов текущей загрузки: sudo journalctl -b
- Просмотр предыдущей загрузки: sudo journalctl -b -1
- Фильтр по сообщению: sudo journalctl | grep “ошибка”
Риск и безопасность
Хранение журналов может раскрывать конфиденциальную информацию. При централизованном сборе следуйте политике минимизации данных и шифрованию при передаче.
Краткое резюме
Journalctl — мощный и гибкий инструмент для чтения журналов systemd. Он удобен для локального расследования и предварительной фильтрации перед отправкой логов в SIEM. Настройте persistent storage, лимиты и ротацию, чтобы обеспечить надёжное и предсказуемое хранение логов.
Важно: если ваша среда не использует systemd, выбирайте подходящий стек логирования, совместимый с вашей системой.
Краткая справка по путям и файлам:
- Конфиг journald: /etc/systemd/journald.conf
- Постоянное хранилище: /var/log/journal
- Команда чтения: journalctl
Похожие материалы
Очистка и организация Evernote
Как печатать дизайны Canva — пошагово
Отключить уведомления iPhone для одного контакта
Tcpdump в Linux — руководство по захвату пакетов
Ограничение времени запросов curl