Введение / Зачем это нужно
Стандартный logrotate десятилетиями справлялся с базовыми задачами администрирования, но современные приложения генерируют гигабайты структурированных данных ежедневно. Ручные конфигурации через cron, отсутствие встроенной валидации и проблемы с блокировкой файлов при высокой нагрузке заставляют специалистов искать более надёжные решения. Переход на современные альтернативы даёт автоматическую проверку конфигов перед применением, сжатие на лету без потери производительности и возможность мгновенной отправки архивов в облачные хранилища или системы мониторинга. Вы получите стабильный процесс очистки дискового пространства и защиту от переполнения разделов.
Требования / Подготовка
Перед началом работы убедитесь, что у вас есть права root или доступ через sudo. На сервере должен быть настроен systemd, так как большинство современных инструментов используют его для управления жизненным циклом. Заранее подготовьте резервную копию директории /var/log и текущих конфигов ротации.
⚠️ Важно: Тестируйте миграцию на staging-окружении или в ночные часы низкой нагрузки, чтобы избежать случайной потери критичных журналов или блокировки записи приложениями.
Шаг 1: Аудит текущей ротации
Оцените текущую нагрузку на подсистему ввода-вывода и объёмы генерируемых данных. Введите команды:
du -sh /var/log/*
ls -la /etc/logrotate.d/
Если объём логов превышает 5 ГБ в день или требуется отправка данных в Grafana/Loki/ELK, выбирайте Vector (написан на Rust, высокая производительность). Для простой локальной ротации с минимальными затратами памяти подойдёт logrotate-ng или swatch. В этом руководстве мы настроим vector как наиболее универсальное и производительное решение.
Шаг 2: Установка и базовая настройка
Добавьте официальный репозиторий и установите пакет. Пример для Debian/Ubuntu:
curl -1sLf 'https://repositories.timber.io/public/vector/install.bash' | sudo bash
sudo apt update && sudo apt install vector
Для RHEL/CentOS 9 / AlmaLinux:
curl -1sLf 'https://repositories.timber.io/public/vector/install.bash' | sudo bash
sudo dnf install vector
После установки включите сервис, но не запускайте его сразу: sudo systemctl enable vector. Это гарантирует автоматический старт после перезагрузки, но не перехватит логи до завершения конфигурации.
Шаг 3: Конфигурация правил ротации
Создайте или отредактируйте конфигурационный файл /etc/vector/vector.toml. Мы настроим сбор логов, их сжатие и сохранение в архивную папку с политикой удаления файлов старше 30 дней.
[sources.syslog_reader]
type = "file"
include = ["/var/log/syslog", "/var/log/*.log"]
read_from = "beginning"
[transforms.log_parser]
type = "remap"
inputs = ["syslog_reader"]
source = """
. = parse_syslog!(.message)
"""
[sinks.local_archive]
type = "file"
inputs = ["log_parser"]
encoding.codec = "json"
path = "/var/log/archived/%Y-%m-%d-%H.log.gz"
compression = "gzip"
rotation = { max_bytes = 1000000000 } # Ротация при достижении 1 ГБ
Конфигурация использует встроенный механизм ротации rotation.max_bytes и автоматически архивирует файлы по расписанию. Для проверки синтаксиса выполните vector validate /etc/vector/vector.toml. Если вывод содержит [OK], переходите к следующему шагу.
Шаг 4: Миграция и отключение logrotate
После успешной валидации запустите сервис: sudo systemctl start vector. Проверьте статус через journalctl -u vector -f. Если в логах нет ошибок и файлы появляются в /var/log/archived/, можно безопасно отключить стандартный инструмент:
sudo systemctl stop logrotate.timer
sudo systemctl mask logrotate.timer
Удалите старые файлы конфигурации из /etc/logrotate.d/ и /etc/logrotate.conf, предварительно убедившись, что все сервисы переключились на новый обработчик.
💡 Совет: Вместо полного удаления конфигов logrotate временно переименуйте директорию
/etc/logrotate.dв/etc/logrotate.d.bak. Если потребуется быстрый откат, командыmvвосстановят работу за секунды.
Проверка результата
Сгенерируйте тестовую нагрузку и убедитесь, что ротация срабатывает автоматически. Запустите цикл:
for i in {1..5000}; do logger "Тестовая запись ротации $i"; done
ls -lh /var/log/archived/
Вы должны увидеть сжатые файлы с корректным размером и меткой времени. Проверьте использование диска: df -h /var/log. Объём должен оставаться стабильным, а старые архивы удаляться согласно настройке политики хранения. Убедитесь, что приложения продолжают записывать события без ошибок No space left on device.
Возможные проблемы
- Ошибка прав доступа (Permission denied): Новый сервис запускается под системным пользователем
vector, у которого иногда нет доступа к закрытым системным журналам. Добавьте пользователя в группуadmилиsystemd-journal:sudo usermod -aG adm vectorи перезапустите сервис черезsudo systemctl restart vector. - Дублирование записей: Если
logrotateи новый инструмент работают одновременно, логи могут дублироваться и занимать двойной объём. Убедитесь, чтоlogrotate.timerполностью остановлен и замаскирован, а приложения пишут вjournaldили напрямую в обработчик нового сервиса. - Высокое потребление CPU при сжатии: Если сервер испытывает нагрузку, измените алгоритм компрессии на
zstdв конфигурацииvector.tomlилиfluent-bit.conf. Он обеспечивает лучшее соотношение скорости и степени сжатия, снижая I/O wait и освобождая процессорное время для рабочих процессов.