Зачем оптимизировать 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.