♻️ Ротация логов встроенными средствами (без logrotate)
В Astra Linux и Red OS можно управлять логами полностью штатными средствами,
без использования logrotate.
Основой является системный компонент systemd-journald,
который автоматически собирает, хранит, сжимает и очищает логи системы.
📑 Содержание
- 1. Что такое systemd-journald
- 2. Где хранятся логи
- 3. Управление ротацией и хранением
- 4. Настройка journald.conf (практика)
- 5. Очистка и ручное управление логами
- 6. Проверка текущего состояния журнала
- 7. Настройки для production-серверов
- 8. Дополнительные команды для анализа
- 9. Советы и рекомендации
🧩 1️⃣ Что такое systemd-journald
systemd-journald — это системный демон, который:
- собирает все системные и служебные сообщения (ядро, systemd, rsyslog, приложения);
- хранит логи в бинарном виде (вместо текстовых файлов);
- управляет объёмом, сроком и сжатием логов;
- имеет встроенную ротацию (без logrotate);
- умеет писать логи в оперативную память (RAM) или на диск.
📂 2️⃣ Где хранятся логи
| Тип хранилища | Путь | Описание |
|---|---|---|
| В памяти (по умолчанию) | /run/log/journal/ |
очищается при перезагрузке |
| На диске (persistent) | /var/log/journal/ |
сохраняется между перезагрузками |
Постоянное хранение включается параметром:
sudo mkdir -p /var/log/journal
sudo systemctl restart systemd-journald
♻️ 3️⃣ Управление ротацией и хранением
Ротация и очистка логов в journald осуществляется автоматически,
на основе параметров из файла /etc/systemd/journald.conf.
Основные механизмы:
- Ограничение по размеру (
SystemMaxUse) - Ограничение по времени (
MaxRetentionSec) - Резервирование свободного места (
SystemKeepFree) - Сжатие старых логов (
Compress=yes) - Автоматическая ротация при достижении лимита
⚙️ 4️⃣ Настройка journald.conf (практика)
Открой файл конфигурации:
sudo nano /etc/systemd/journald.conf
Пример конфигурации для постоянного хранения логов:
[Journal]
Storage=persistent # хранить логи на диске
Compress=yes # сжимать старые записи
Seal=yes # защита от подмены
SplitMode=uid # разделять логи по пользователям
SystemMaxUse=2G # общий лимит для логов
SystemKeepFree=1G # оставлять свободное место
SystemMaxFileSize=200M # максимальный размер одного файла
RuntimeMaxUse=256M # ограничение для логов в памяти
MaxRetentionSec=3month # хранить 3 месяца
ForwardToSyslog=yes # дублировать в rsyslog (если включен)
Применить изменения:
sudo systemctl restart systemd-journald
Проверить состояние службы:
systemctl status systemd-journald
🧹 5️⃣ Очистка и ручное управление логами
Проверить объём занимаемого места:
sudo journalctl --disk-usage
Удалить логи старше 14 дней:
sudo journalctl --vacuum-time=14d
Удалить логи, если общий объём превышает 500 МБ:
sudo journalctl --vacuum-size=500M
Принудительно выполнить ротацию журнала:
sudo journalctl --rotate
Полностью очистить журнал (осторожно!):
sudo journalctl --rotate
sudo journalctl --vacuum-time=1s
🔍 6️⃣ Проверка текущего состояния журнала
Сколько логов сохранено:
sudo journalctl --disk-usage
Последние записи:
sudo journalctl -n 20
По конкретной службе:
sudo journalctl -u ssh.service
По времени:
sudo journalctl --since "2025-10-01" --until "2025-10-07"
Только ошибки:
sudo journalctl -p err -b
🏢 7️⃣ Настройки для production-серверов
Рекомендуемая конфигурация для серверов Astra / Red OS:
[Journal]
Storage=persistent
Compress=yes
SystemMaxUse=2G
SystemKeepFree=1G
SystemMaxFileSize=200M
RuntimeMaxUse=256M
MaxRetentionSec=1month
ForwardToSyslog=yes
persistent— сохранять логи после перезагрузкиSystemMaxUse— не допускать переполнения дискаMaxRetentionSec— хранить не более 1 месяцаCompress=yes— включить сжатиеForwardToSyslog=yes— дублировать логи в/var/log/messages(если rsyslog включён)
🧠 8️⃣ Дополнительные команды для анализа
| Задача | Команда |
|---|---|
| Просмотреть логи ядра | sudo journalctl -k |
| Только ошибки | sudo journalctl -p err |
| Сессия текущего запуска | sudo journalctl -b |
| Предыдущий запуск | sudo journalctl -b -1 |
| По пользователю | sudo journalctl _UID=1000 |
| По process ID | sudo journalctl _PID=1234 |
| По unit (службе) | sudo journalctl -u nginx |
| Вывести в реальном времени | sudo journalctl -f |
💡 9️⃣ Советы и лучшие практики
✅ Проверяй размер журналов регулярно
du -sh /var/log/journal
journalctl --disk-usage
✅ Используй SystemKeepFree — оставляй запас свободного места на системном разделе.
Это защищает систему от переполнения /var.
✅ Настраивай MaxRetentionSec по требованиям безопасности (обычно 30–90 дней).
✅ Для систем без rsyslog достаточно journald — он уже покрывает все функции системного журналирования и ротации.
✅ Не удаляй файлы вручную из /var/log/journal/,
используй только journalctl --vacuum-* — иначе база journald может повредиться.
✅ В Astra Linux SE каталог /var/log/journal может быть отключён по политике —
если логи не сохраняются, проверь параметр Storage= в конфиге.
🧩 Итог
🔹 В Astra Linux и Red OS встроенная система systemd-journald полностью заменяет внешние утилиты для ротации логов.
🔹 Все операции (сжатие, очистка, ограничение по размеру и времени) выполняются автоматически.
🔹 Настраивается всё в одном файле /etc/systemd/journald.conf.
🔹 Не требует установки logrotate или сторонних скриптов.
💡 Это безопасный и надёжный способ управления логами, рекомендованный для защищённых систем.