logrotate: как не забить диск логами через месяц работы
Я зашел на сервер через три недели после деплоя. Диск был забит под ноль. Приложение не писало новые данные, мониторинг молчал, клиенты начали жаловаться на тормоза.
Как я до этого дошел
На старте проекта мы просто настроили вывод логов в файл и забыли. Сервер тестировали пару дней — всё было чисто. Но через месяц логов накопилось на 40 гигабайт.
Система не умела их чистить. Я вручную удалял старые файлы, пока не понял: так жить нельзя.
В чем была проблема
Логи — это не мусор, но без ротации они превращаются в бомбу замедленного действия. Одно приложение может генерировать гигабайты в день. Если не ограничить размер, диск заполнится, и сервер упадет.
К тому же разбирать файл на 10 ГБ в текстовом редакторе — то еще удовольствие.
Логи нужно не только писать, но и уметь вовремя выкидывать.
Почему это касается бизнеса
- 📉 Полный диск останавливает сервис — клиенты теряют доступ
- 💸 Экстренное расширение диска или чистка руками — это деньги и время команды
- ⚠️ Потеря свежих логов при падении — упущенная возможность найти баг
Что я сделал
Поставил logrotate — стандартный инструмент в Linux. Он умеет сжимать, удалять и переименовывать логи по расписанию. Без танцев с бубном.
Написал простой конфиг для nginx и своего приложения. Пример для типового случая:
/var/log/myapp/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
postrotate
systemctl reload myapp
endscript
}
Здесь я указал: ротация каждый день, хранить 7 копий, сжимать старые файлы, не ругаться, если лога нет, и перезагружать сервис после ротации.
Важный момент — postrotate. Без него приложение продолжит писать в удаленный файл, и диск не освободится. reload или restart решает это.
Что изменилось
Диск перестал забиваться. Максимум, что занимают логи за неделю — 200 мегабайт в сжатом виде. Старые файлы удаляются сами, я про них забыл.
Еще один плюс: теперь я могу быстро найти нужную дату. Логи разложены по дням, а не валяются одной кучей. Для отладки это спасение.
📬 Свяжитесь с нами
Хотите внедрить это в своем бизнесе? Пишите нам!
- 📧 Email: [email protected]
- 🌐 Сайт: 1it.pro
- 📝 Блог: blog.1it.pro
- ✈️ Telegram Global (EN): Admin_global
- ✈️ Telegram (RU): Admin