Linux

Заменяем logrotate: лучшие альтернативы ротации логов в Linux

Узнайте, почему стандартный logrotate уступает современным аналогам, и настройте ротацию логов с помощью Vector, Fluent Bit или logrotate-ng. Вы получите готовые конфигурации и безопасный план миграции.

Обновлено 4 апреля 2026 г.
20-30 мин
Средняя
FixPedia Team
Применимо к:Ubuntu 20.04+Debian 11+RHEL/CentOS 9AlmaLinux/Rocky 9

Введение / Зачем это нужно

Стандартный 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 и освобождая процессорное время для рабочих процессов.

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

Почему стоит уйти от стандартного logrotate?
Безопасно ли удалять logrotate после установки альтернативы?
Какой инструмент выбрать для высоконагруженных серверов?

Полезное

Аудит текущей ротации
Установка современного инструмента
Создание конфигурации ротации
Запуск и тестирование

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