hostprofi.ru
Подобрать хостинг
Термин·буква J

journald

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

journald (systemd-journald) — системный демон ведения журналов в Linux-системах с systemd. Собирает логи ядра, системных служб и приложений в бинарный журнал, индексирует их и предоставляет инструмент journalctl для гибкой фильтрации и поиска.

systemd-journald — компонент systemd, отвечающий за сбор, хранение и индексацию системных журналов. В отличие от традиционного syslog (текстовые файлы без структуры), journald хранит логи в бинарном формате с метаданными: PID, UID, имя юнита systemd, syslog-приоритет (0–7), временная метка с наносекундной точностью, boot ID. Это позволяет фильтровать логи по любому полю без grep по строкам.

Как работает journald

journald собирает сообщения из нескольких источников одновременно:

  • Ядро Linux (kmsg — заменяет dmesg для boot-сообщений)
  • Stdout/stderr всех systemd-юнитов (автоматически, без настройки)
  • Сообщения через syslog socket (совместимость со старыми демонами)
  • Нативный Journal API (journald_send()) для приложений с структурированными полями
  • Аудит-подсистема ядра Linux (audit)

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

# Последние 100 строк nginx:
journalctl -u nginx.service -n 100

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

# Только ошибки и критические:
journalctl -p err

# Следить в реальном времени:
journalctl -f

# Логи конкретного PID:
journalctl _PID=12345

# Экспорт в JSON:
journalctl -u nginx -o json --no-pager

История

journald разработал Леннарт Петтеринг (Lennart Poettering) как часть systemd. Представлен в systemd версии 38 в декабре 2011 года. Переход на journald вызвал дискуссии: критики указывали на бинарный формат (риск потери журнала при повреждении файла), сторонники — на структурированное хранение и индексацию. Debian перешёл на systemd с journald в версии 8 (Jessie, 2015), Ubuntu — в 15.04 (2015).

Настройка journald

Основные параметры в /etc/systemd/journald.conf:

  • SystemMaxUse=500M — максимальный размер журнала на диске
  • MaxRetentionSec=1month — срок хранения записей
  • Compress=yes — сжатие старых журналов (включено по умолчанию)
  • Storage=persistent — хранить на диске (default: auto)
  • ForwardToSyslog=yes — пересылать в rsyslog/syslog-ng для совместимости
  • RateLimitBurst=1000 — лимит сообщений в интервал (защита от log flood)

journald в серверной инфраструктуре

Для централизованного сбора логов с нескольких VPS-серверов journald интегрируется с log-aggregation-системами: Loki + Grafana (современный вариант, минимальные ресурсы), ELK-стек (Elasticsearch + Logstash + Kibana, мощный, но тяжёлый), Graylog. Плагин systemd для Loki Promtail автоматически собирает все journald-логи без дополнительной конфигурации. systemd-journal-remote пересылает журналы на централизованный сервер по HTTPS. Интеграция с Prometheus через systemd_exporter позволяет алертить на статусы юнитов: сервис упал и не перезапустился за 5 минут.

Просмотр размера журнала: journalctl --disk-usage. Принудительная ротация: journalctl --vacuum-size=200M. Экспорт в текстовый файл: journalctl --since "2024-01-01" > /backup/journal.log.

journald vs rsyslog

До systemd логирование обеспечивал rsyslog (syslogd), хранящий логи в текстовых файлах. journald не заменяет rsyslog полностью — оба могут работать одновременно: journald перехватывает все события, rsyslog читает из journal-сокета и записывает в текстовые файлы для совместимости с традиционными инструментами. ForwardToSyslog=yes в journald.conf включает переброс в rsyslog.

journald vs традиционный syslog

Параметрjournaldrsyslog/syslog-ng
Формат храненияБинарный (индексированный)Текстовые файлы
Структурированные поляДа (PID, UID, юнит)Только через шаблон
Быстрый поискДа (индекс по полям)grep по файлам
РотацияАвтоматическая по размеруlogrotate
Форвардинг в ELK/LokiЧерез systemd-journal-remoteНативный форвардинг

На практике большинство production-серверов запускают и journald, и rsyslog одновременно: journald собирает все логи от systemd-сервисов, rsyslog форвардит их в централизованную систему (Elasticsearch, Loki, Graylog). Параметр ForwardToSyslog=yes в journald.conf обеспечивает эту интеграцию.

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