Ротация и очистка старых логов, чтобы не забить диск
Ротация и очистка логов: как не утопить сервер в мусоре
Вы когда-нибудь видели, как диск сервера внезапно заканчивается, хотя по расчетам места должно хватать? Или как сайт начинает тормозить, потому что система тратит ресурсы на запись гигабайтов логов? Это как если бы вы годами не выносили мусор из квартиры — рано или поздно он завалит все проходы.
Логи (logs) — это записки вашего сервера о том, что с ним происходит: кто заходил, какие ошибки случались, какие процессы работали. Они критически важны для отладки, но если их не чистить, они превратятся в цифровую свалку, которая:
- Забьет диск (особенно на VPS с ограниченным пространством).
- Замедлит работу (постоянная запись в огромные файлы нагружает I/O).
- Усложнит поиск важной информации (искать иголку в стоге сена — не самое веселое занятие).
В этом уроке вы научитесь: ✅ Настраивать ротацию логов (автоматическое архивирование и удаление старых записей). ✅ Очищать логи вручную (если автоматика подвела). ✅ Оптимизировать хранение (чтобы логи занимали меньше места, но оставались полезными). ✅ Избегать типичных ошибок (например, удаления логов, которые еще нужны для мониторинга).
1. Почему логи разрастаются как сорняки?
Представьте, что вы ведете дневник, куда записываете каждую мелочь:
- "10:03 — зашел пользователь с IP 192.168.1.1"
- "10:04 — ошибка 404 на странице /old-link"
- "10:05 — PHP-предупреждение о нехватке памяти"
Если записывать все подряд без ограничений, через месяц дневник раздуется до тысяч страниц. То же самое происходит с логами на сервере.
Какие логи съедают больше всего места?
| Тип лога | Где хранится | Почему разрастается | Риск при игнорировании |
|---|---|---|---|
| Nginx/Apache | /var/log/nginx/, /var/log/apache2/ |
Записывает каждый запрос (включая ботов). | Диск заполнится за неделю. |
| Системные (syslog) | /var/log/syslog, /var/log/messages/ |
Логи ядра, сервисов, cron-задач. | Потеря важных событий (взломы, сбои). |
| MySQL/PostgreSQL | /var/log/mysql/, /var/log/postgresql/ |
Запросы, ошибки, медленные транзакции. | Утечка конфиденциальных данных. |
| PHP-FPM | /var/log/php-fpm.log |
Ошибки скриптов, предупреждения. | Замедление работы сайта. |
| Arbitrage-скрипты | Кастомные логи (например, /var/log/arbitrage/) |
Логи парсеров, прокси, кликеров. | Потеря данных для анализа. |
Пример из жизни: Один арбитражник не настроил ротацию логов для своего парсера. Через 3 дня диск на 50 ГБ был забит на 98% — сервер упал, а вместе с ним и рекламные кампании. Восстановление заняло 6 часов и стоило нескольких тысяч рублей упущенной прибыли.
2. Ротация логов: как автоматизировать уборку?
Ротация (log rotation) — это процесс архивирования и удаления старых логов по расписанию. Вместо одного огромного файла вы получаете много маленьких, сжатых и аккуратно пронумерованных.
Как работает ротация?
- Сжатие: Старые логи архивируются (например, в
.gz), чтобы занимали меньше места. - Переименование:
access.log→access.log.1,access.log.2.gzи т. д. - Удаление: Через N дней/недель старые архивы удаляются.
Инструмент №1: logrotate (стандарт в Linux)
Это утилита, которая уже установлена на вашем сервере. Она управляется конфигурационными файлами в /etc/logrotate.d/.
Пример конфига для Nginx (/etc/logrotate.d/nginx)
/var/log/nginx/*.log {
daily # Ротация каждый день
missingok # Не ругаться, если файла нет
rotate 14 # Хранить 14 архивов
compress # Сжимать старые логи
delaycompress # Сжимать не сразу, а со следующей ротации (чтобы логи оставались читабельными)
notifempty # Не ротировать пустые файлы
create 0644 www-data adm # Создавать новые файлы с этими правами
sharedscripts # Выполнять скрипты один раз для всех логов
postrotate # Команды после ротации (например, перезагрузка Nginx)
systemctl reload nginx
endscript
}
Ключевые параметры logrotate
| Параметр | Значение | Пример |
|---|---|---|
daily/weekly |
Частота ротации. | weekly |
rotate N |
Сколько архивов хранить. | rotate 7 (7 недель) |
compress |
Сжимать логи (по умолчанию в .gz). |
— |
size M |
Ротировать, если файл превысил M мегабайт. | size 100M |
maxsize M |
Максимальный размер лога до ротации. | maxsize 50M |
delaycompress |
Не сжимать сразу (полезно, если логи еще анализируются). | — |
missingok |
Не выдавать ошибку, если файла нет. | — |
postrotate |
Команды после ротации (например, перезагрузка сервиса). | systemctl reload apache2 |
Как проверить и запустить ротацию вручную?
- Проверка конфига (без реальных действий):
logrotate -d /etc/logrotate.conf - Принудительный запуск:
logrotate -vf /etc/logrotate.conf(Флаг
-f— forced,-v— verbose, покажет детали.)
Важно! Если вы используете Docker, ротацию нужно настраивать внутри контейнера или монтировать логи на хост и ротировать их там.
3. Очистка логов вручную: когда автоматика не справилась
Иногда логи разрастаются так быстро, что logrotate не успевает. Или вы забыли его настроить. В таких случаях приходится чистить вручную.
Как найти и удалить большие логи?
-
Найти самые крупные файлы в
/var/log/:sudo du -ah /var/log/ | sort -rh | head -n 20(Эта команда покажет топ-20 самых тяжелых файлов.)
-
Очистить конкретный лог (например,
nginx/error.log):sudo truncate -s 0 /var/log/nginx/error.log(Файл обнулится, но останется доступен для записи.)
-
Удалить старые архивы (например, старше 30 дней):
sudo find /var/log/nginx/ -type f -name "*.gz" -mtime +30 -delete
⚠️ Внимание!
- Не удаляйте логи активных процессов (например,
mysql.error.log, если MySQL работает). Лучше обнулите их (truncate).- Перед массовым удалением сделайте резервную копию:
sudo tar -czvf logs_backup_$(date +%Y-%m-%d).tar.gz /var/log/
4. Оптимизация логов: как уменьшить их размер без потери данных
Способ 1: Уменьшить уровень логирования
Многие сервисы позволяют фильтровать логи по важности. Например, в Nginx:
error_log /var/log/nginx/error.log warn; # Логировать только предупреждения и ошибки
(Вместо warn можно использовать error, crit — тогда будет меньше записей.)
Способ 2: Исключить ненужные логи
Если у вас арбитражный скрипт, который пишет логи каждого клика, добавьте фильтрацию:
# Пример для Python (logging)
import logging
logging.basicConfig(
filename='arbitrage.log',
level=logging.WARNING, # Только предупреждения и ошибки
format='%(asctime)s - %(levelname)s - %(message)s'
)
Способ 3: Перенаправить логи в /dev/null (крайний случай)
Если логи совсем не нужны (например, от тестового скрипта), можно отправить их в никуда:
echo "" > /var/log/unnecessary.log # Обнуление
# Или перенаправить вывод:
your_script.sh > /dev/null 2>&1
⚠️ Опасно! Так вы потеряете все логи, включая критические ошибки. Используйте только для временных задач.
Способ 4: Хранить логи на внешнем сервере
Если логи критически важны (например, для анализа арбитражных кампаний), но занимают много места, перенесите их на:
- S3 (AWS, Yandex Cloud) — дешевое хранение.
- Elasticsearch + Kibana — для продвинутого анализа.
- Удаленный syslog-сервер (например,
rsyslog).
5. Типичные ошибки и как их избежать
| Ошибка | Последствия | Как исправить? |
|---|---|---|
| Не настроена ротация | Диск заполняется, сервер падает. | Настройте logrotate (см. раздел 2). |
| Слишком долгое хранение | Логи занимают сотни гигабайт. | Уменьшите rotate N в конфиге. |
| Удалены нужные логи | Потеря данных для отладки. | Делайте бэкапы перед очисткой. |
| Логи не сжимаются | Архивы занимают много места. | Добавьте compress в конфиг logrotate. |
| Ротация ломает сервис | Например, Nginx не перезагружается. | Проверьте секцию postrotate. |
6. Практика для закрепления
Упражнение 1: Проверка текущих логов
- Зайдите на свой сервер по SSH.
- Выполните команду:
df -h- Сколько места занято на
/var/log?
- Сколько места занято на
- Найдите топ-5 самых больших логов:
sudo du -ah /var/log/ | sort -rh | head -n 5- Какие сервисы их генерируют?
Упражнение 2: Настройка logrotate для Nginx
- Откройте конфиг:
sudo nano /etc/logrotate.d/nginx - Измените параметры:
- Ротация раз в неделю (
weekly). - Хранить 4 архива (
rotate 4). - Сжимать логи (
compress).
- Ротация раз в неделю (
- Принудительно запустите ротацию:
sudo logrotate -vf /etc/logrotate.d/nginx - Проверьте, появились ли архивы в
/var/log/nginx/.
Упражнение 3: Очистка логов вручную
- Найдите логи старше 7 дней:
sudo find /var/log/ -type f -mtime +7 -name "*.log" - Обнулите один из них (например,
debug.log):sudo truncate -s 0 /var/log/debug.log - Удалите все
.gz-архивы старше 30 дней:sudo find /var/log/ -type f -name "*.gz" -mtime +30 -delete
Упражнение 4: Оптимизация логирования
- Для Nginx измените уровень логирования ошибок на
error(вместоwarn) в/etc/nginx/nginx.conf:error_log /var/log/nginx/error.log error; - Перезагрузите Nginx:
sudo systemctl reload nginx - Проверьте, уменьшился ли размер
error.logчерез день.
Вопрос для размышления
Вы арбитражник, и ваш парсер генерирует 1 ГБ логов в день. Диск на сервере — 50 ГБ, из которых 10 ГБ занято системой.
- Сколько дней пройдет до заполнения диска, если не настраивать ротацию?
- Какие параметры
logrotateвы выберете, чтобы хранить логи 2 недели, но не тратить больше 20 ГБ?
Итоги урока
✅ Логи — как мусор в квартире: если не убирать, они завалят все пространство.
✅ Ротация (logrotate) — ваш главный инструмент для автоматической уборки.
✅ Очистка вручную нужна, когда автоматика не справилась (используйте truncate, find, rm).
✅ Оптимизация (уровни логирования, фильтрация) помогает сократить объем логов без потери важных данных.
✅ Типичные ошибки: ненастроенная ротация, удаление нужных логов, отсутствие бэкапов.
Домашнее задание:
- Настройте
logrotateдля всех критичных сервисов на вашем сервере. - Запустите принудительную ротацию и проверьте, что архивы создались.
- Напишите скрипт, который будет раз в неделю отправлять вам на почту список самых больших логов (подсказка:
du + mail).
Вопросы? Пишите в комментариях — разберем сложные случаи! 🚀
Генератор паролей с длинной 64 символа
Женская одежда с бахромой
Кадастровые работы в Бийске
Как Aptum хостинг помогает малым бизнесам в управлении CRM-системами
Как выбрать планировку сайта для блогов на DreamHost
Как выбрать Vdsina вечный хостинг для своего проекта
Казань окна VEKA - профессионализм и опыт
Курьерская вода
Новостройки Оренбурга: недвижимость с отличной ценой
Онлайн чат-партнерство
Пиломатериалы для возведения бани
Почему VDSina — лучший выбор хостинга
Секреты Вконтакте: тонкости и хитрости
Скидки до 50% на тур в Коста-Рике
Видеочат рулетка бесплатно