hostprofi.ru
Подобрать хостинг
Термин

journalctl

краткое определение

Утилита для просмотра журналов systemd с фильтрацией по сервису, времени и приоритету.

journalctl — командная утилита для чтения журнала systemd (systemd Journal). В отличие от классических текстовых логов в /var/log/, Journal хранит события в бинарном формате с богатыми метаданными: unit-имя, PID, UID, имя хоста, временная метка в наносекундах. Это ускоряет фильтрацию и поиск по тысячам записей.

Как работает

Демон systemd-journald собирает сообщения из нескольких источников: stdout/stderr сервисов systemd, syslog-сокета, ядра (kmsg) и аудит-фреймворка. Каждая запись тегируется метаданными автоматически — не нужно настраивать парсинг. Журнал хранится в /run/log/journal/ (RAM, не переживает перезагрузку) или /var/log/journal/ (диск, постоянный).

Основные команды

# Все логи (с пагинацией less)
journalctl

# Последние 100 строк
journalctl -n 100

# Следить за новыми записями (как tail -f)
journalctl -f

# Логи конкретного сервиса
journalctl -u nginx.service

# Логи за последний час
journalctl --since "1 hour ago"

# Логи между датами
journalctl --since "2024-01-01 00:00" --until "2024-01-02 00:00"

# Только ошибки (priority 3 = err)
journalctl -p err

# Логи текущей загрузки
journalctl -b

# Предыдущей загрузки
journalctl -b -1

# JSON-вывод для парсинга
journalctl -u nginx -o json-pretty | head -50

История

journalctl появился в 2012 году как часть systemd 38. Автор systemd Леннарт Поттеринг предложил заменить текстовые syslog-файлы структурированным бинарным журналом. Переход встретил сопротивление: администраторы, привыкшие к tail -f /var/log/syslog, критиковали бинарный формат как непрозрачный. Ответом стала полная совместимость — journald также пишет в syslog-сокет, и традиционные файлы продолжают работать параллельно.

Фильтрация и анализ

Мощная сторона journalctl — комбинирование фильтров. Пример: все ошибки nginx за вчера:

journalctl -u nginx.service -p err --since yesterday

Поиск по полям: journalctl _PID=1234 — все записи от процесса с PID 1234. journalctl _UID=1000 — записи от конкретного пользователя. journalctl SYSLOG_IDENTIFIER=php-fpm — записи PHP-FPM без привязки к unit.

Для экспорта в Grafana или Datadog используется вывод в JSON: journalctl -o json. Loki от Grafana Labs нативно читает journald через Promtail-агент.

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

Журнал занимает не более 10% файловой системы по умолчанию. Настраивается в /etc/systemd/journald.conf:

SystemMaxUse=500M       # максимальный размер на диске
SystemKeepFree=1G       # минимум свободного места
MaxRetentionSec=30day   # хранить не дольше 30 дней

Принудительная очистка: journalctl --vacuum-size=200M или journalctl --vacuum-time=7d.

На что обращать внимание

Бинарный формат журнала может повредиться при жёсткой перезагрузке. Признак — сообщение «Journal file is corrupted». Исправление: journalctl --verify, затем удалить повреждённые файлы из /var/log/journal/. На высоконагруженных серверах с тысячами событий в секунду journald настраивают на форвардинг в log-server и ограничивают локальный объём.

На серверах с высокой нагрузкой используйте journalctl -u nginx --output=cat для вывода без метаданных — быстрее парсится скриптами.

Другие термины