Linux

Настройка systemd-journald: контроль и сжатие логов Linux

Разберёмся, как управлять системным журналированием Linux через systemd-journald. Вы научитесь ограничивать размер логов, настраивать ротацию и ускорять поиск по записям без потери важных данных.

Обновлено 5 апреля 2026 г.
10-15 мин
Средняя
FixPedia Team
Применимо к:Ubuntu 20.04 / 22.04 / 24.04Debian 11 / 12RHEL / AlmaLinux / Rocky Linux 8+Fedora 38+

Зачем оптимизировать systemd-journald

Системный журналист Linux собирает события ядра, сервисов, приложений и аудита в едином формате. Без явных ограничений журнал может разрастись до нескольких гигабайт, особенно на серверах с высокой нагрузкой или на устройствах с небольшим SSD. Правильная конфигурация systemd-journald гарантирует стабильную работу системы, экономит дисковое пространство и ускоряет анализ инцидентов за счёт сжатия и чёткой ротации.

Требования и подготовка

Перед началом убедитесь, что у вас есть:

  • Доступ к учётной записи с привилегиями sudo или root.
  • Дистрибутив, использующий systemd (практически все современные Linux).
  • Резервная копия важных логов, если вы планируете сократить срок их хранения.

Проверьте текущее состояние и занимаемое место:

journalctl --disk-usage

Команда покажет общий объём архивного и активного хранилища. Если папка /var/log/journal/ существует, служба уже сохраняет данные на диск. Если её нет, логи живут только в оперативной памяти до перезагрузки.

Шаг 1: Создание безопасного файла конфигурации

Не редактируйте /etc/systemd/journald.conf напрямую. При обновлении дистрибутива ваши изменения могут быть перезаписаны. Вместо этого используйте механизм drop-in директорий:

sudo mkdir -p /etc/systemd/journald.conf.d
sudo touch /etc/systemd/journald.conf.d/override.conf

Файл override.conf будет автоматически подгружаться основным конфигурационным файлом, сохраняя приоритет ваших параметров.

Шаг 2: Настройка размера, ротации и сжатия

Откройте созданный файл в удобном текстовом редакторе:

sudo nano /etc/systemd/journald.conf.d/override.conf

Добавьте следующий блок конфигурации. Параметры задокументированы прямо в коде, чтобы вы понимали, за что отвечает каждая строка:

[Journal]
# Режим хранения: persistent (на диск), volatile (только RAM), auto (по умолчанию)
Storage=persistent

# Максимальный объём всех архивных логов на диске (например, 500M, 2G)
SystemMaxUse=500M

# Гарантированный минимум свободного места на разделе, где лежат логи
SystemKeepFree=100M

# Максимальный размер одного файла журнала до ротации
SystemMaxFileSize=50M

# Срок хранения записей: 1month, 1y, 1year, etc.
MaxRetentionSec=1month

# Включить сжатие логов (экономит 50-70% места, нагрузка на CPU минимальна)
Compress=yes

# Отключить дублирование логов в syslog (чтобы не плодить записи в /var/log/syslog)
ForwardToSyslog=no

💡 Совет: Значение SystemMaxUse должно быть меньше, чем общий объём раздела / или /var/log. Если оставить параметр пустым, journald использует 10% раздела или 4 ГБ (что наступит раньше).

Шаг 3: Применение изменений и перезапуск службы

После сохранения файла проверьте синтаксис конфигурации:

sudo systemd-analyze verify /etc/systemd/journald.conf

Если команда не вывела ошибок, перезапустите службу журналирования:

sudo systemctl restart systemd-journald

⚠️ Важно: В момент перезапуска может произойти кратковременная потеря нескольких строк логов, так как служба пересоздаёт файловые дескрипторы. Для production-нагрузки рекомендуется проводить операцию в часы низкой нагрузки.

Проверка результата

Убедитесь, что служба работает корректно:

systemctl status systemd-journald

В выводе должен отображаться статус active (running). Теперь проверьте, применились ли новые лимиты, очистив старые записи:

sudo journalctl --vacuum-time=7d
sudo journalctl --disk-usage

Команда --vacuum-time удалит все архивы старше указанной даты, мгновенно освободив место. Убедитесь, что файлы физически появились в директории:

ls -lh /var/log/journal/

Здесь должны отображаться сжатые файлы с расширением .journal (или .zst в новых версиях systemd).

Возможные проблемы

Служба не запускается после перезагрузки. Чаще всего причина — опечатка в имени параметра или недопустимое значение в override.conf. Проверьте журнал ошибок: sudo journalctl -xeu systemd-journald. Исправьте значение и запустите sudo systemctl daemon-reload && sudo systemctl restart systemd-journald.

Логи пропали или не пишутся на диск. Проверьте параметр Storage=persistent. Если вы случайно установили volatile, данные хранятся в /run/log/journal/ и исчезают при ребуте. Также убедитесь, что у папки /var/log/journal/ выставлены корректные права: sudo chown root:systemd-journal /var/log/journal/ и sudo chmod 2755 /var/log/journal/.

Диск всё равно заполняется, несмотря на SystemMaxUse. Параметр применяется только к новым записям. Если старые архивы уже заняли 10 ГБ, лимит в 500 МБ их не удалит автоматически. Выполните принудительную очистку: sudo journalctl --vacuum-size=400M.

Часто задаваемые вопросы

Почему логи systemd-journald занимают слишком много места на диске?
Можно ли полностью отключить journald в пользу rsyslog?
Удалятся ли старые логи после изменения конфигурации?

Полезное

Создание директории для переопределений
Настройка лимитов хранения
Применение конфигурации
Очистка устаревших записей

Эта статья помогла вам решить проблему?