Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.
LINUX-SYSTEMD-JOURNALD-TUNE Linux / DevOps

Гайд: Настройка сбора логов через systemd-journald: постоянное хранилище, ротация и лимиты размера

Обновлено: 21.08.2026  ·  Официальная база знаний

Архитектура системного бинарного журнала systemd-journald

Служба systemd-journald является ядром сбора системных событий, сообщений ядра (kmsg), логов демонов (stdout/stderr) и аудита безопасности в современных дистрибутивах Linux. Журнал сохраняется в структурированном бинарном формате с поддержкой индексации по полям и криптографической верификации (FSS). При некорректной базовой настройке journald администраторы сталкиваются с двумя крайностями:

  • Потеря истории после перезагрузки: Журнал работает в режиме Storage=volatile и сохраняется только в оперативной памяти (/run/log/journal), стирая все данные при падении сервера;
  • Бесконтрольное переполнение диска: Журнал занимает 10%–20% корневого раздела, вытесняя свободное место и приводя к сбоям СУБД;
  • Journal corruption / Corrupt journal entry: Повреждение бинарных индексов логов при некорректном завершении работы.

Бизнес-риски

Невозможность ретроспективного расследования инцидентов информационной безопасности и аварий, падение приложений из-за 100% переполнения раздела /var/log.

Параметры директивы Storage в journald.conf

Значение StorageГде сохраняются логиПоведение при перезагрузке
volatileТолько в RAM: /run/log/journal/Логи стираются при каждом ребуте.
persistentНа диске: /var/log/journal/Логи сохраняются персистентно с авторотацией.
auto (дефолт)На диске, ЕСЛИ существует каталог /var/log/journal; иначе в RAM.Зависит от наличия физического каталога на диске.
noneЛоги не сохраняются нигде (полный сброс в null).Мониторинг невозможен.

Регламент оптимизации, ротации и очистки journald

Сценарий 1: Включение персистентного хранения и настройка квот диска

Сконфигурируйте файл /etc/systemd/journald.conf:

# 1. Создайте каталог для постоянного хранения на диске:
sudo mkdir -p /var/log/journal
sudo systemd-tmpfiles --create --prefix /var/log/journal

# 2. Настройка параметров хранения и ротации:
sudo nano /etc/systemd/journald.conf

# Установите следующие директивы в секции [Journal]:
[Journal]
Storage=persistent
Compress=yes
SystemMaxUse=2G          # Максимальный суммарный размер всех файлов журнала на диске
SystemKeepFree=5G        # Сколько свободного места ВСЕГДА оставлять на диске
SystemMaxFileSize=100M   # Максимальный размер одного сегмента файла журнала
MaxRetentionSec=1month   # Хранить логи не дольше 1 месяца
RateLimitIntervalSec=30s # Ограничение флуда сообщениями (Rate Limiting)
RateLimitBurst=10000

# 3. Перезапустите службу journald для применения настроек:
sudo systemctl restart systemd-journald

Сценарий 2: Экстренная очистка и вакуумирование старых логов (Vacuuming)

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

# 1. Проверка текущего объема, занятого логами на диске:
journalctl --disk-usage

# 2. Вакуумирование: оставить журналы только за последние 3 дня:
sudo journalctl --vacuum-time=3d

# 3. Вакуумирование: уменьшить суммарный размер логов до 500 МБ:
sudo journalctl --vacuum-size=500M

# 4. Проверка целостности бинарных файлов журнала:
sudo journalctl --verify

Сценарий 3: Эффективная выборка данных через journalctl

# Вывод логов конкретного юнита за последний час с форматированием JSON:
journalctl -u nginx.service --since "1 hour ago" --no-pager

# Мониторинг системных ошибок ядра в реальном времени:
journalctl -k -f -p 3

Типовые ошибки администраторов

  • Удаление файлов .journal через rm -rf /var/log/journal/*: Ручное удаление открытых активных файлов журнала нарушает внутренние дескрипторы демона и оставляет занятое место в ОС. Всегда используйте команду journalctl --vacuum-*.
  • Отключение Rate Limiting при флудящих сервисах: Если сервис пишет 100 000 ошибок в секунду, отключенный RateLimit приведет к 100% утилизации CPU процессом systemd-journald.
Процесс systemd-journald грузит процессор на 100% или диск переполнен?
Инженеры ITSTM настроят централизованный экспорт логов в Loki/Elasticsearch, настроят агрегацию и изолируют флудящие сервисы.
Практический опыт инженера: Всегда включайте директиву Compress=yes в journald.conf. Бинарные структурированные логи journald отлично поддаются сжатию алгоритмами LZ4 и ZSTD, снижая требования к дисковому пространству в 5–8 раз практически без нагрузки на CPU.

Частые вопросы (FAQ)

Как перенаправить логи journald в классический syslog (/var/log/syslog)?

Включите директиву ForwardToSyslog=yes в /etc/systemd/journald.conf и установите демон rsyslog.

Что делать, если journalctl --verify сообщает о поврежденных файлах (FAIL)?

Выполните принудительную ротацию: sudo journalctl --rotate, после чего удалите только архивные поврежденные файлы через journalctl --vacuum-size.

Как смотреть логи с другого сервера или смонтированного диска?

Используйте ключ указания директории: journalctl -D /mnt/target/var/log/journal.

Как отключить сброс stdout/stderr для шумного сервиса?

В unit-файле сервиса в секции [Service] укажите директивы StandardOutput=null и StandardError=journal.