Управление логами с помощью logrotate

Быстрые ссылки
Что делает logrotate?
Установка logrotate (если он не установлен)
Как работает logrotate
Большинство сервисов в Linux генерируют файлы логов, обычно в каталоге /var/log/. Это обычные текстовые файлы, но они могут занимать много места — вплоть до полного заполнения диска. Logrotate помогает автоматически управлять этими файлами, чтобы предотвратить переполнение дискового пространства.
Что делает logrotate?
Logrotate управляет логами: архивирует текущий лог, создаёт новый пустой файл и удаляет самые старые архивы после заданного количества ротаций. По умолчанию для некоторых сервисов (например, nginx) может быть задано хранение логов длительное время, поэтому стоит проверить и подправить конфигурацию под ваши требования.
Определения
- Лог: текстовый файл с записями событий приложения или сервиса.
- Ротация: процесс переименования/архивации текущего лога и создания нового пустого файла.
Чтобы быстро выяснить, какие сервисы занимают больше всего места логами, используйте команду du:
du -h /var/log/ | sort -hrЭта команда суммирует размеры директорий внутри /var/log/ и сортирует их в человекочитаемом виде. Результат покажет каталоги с наибольшим использованием диска:

Учтите, что du отображает размеры директорий — чтобы увидеть отдельные файлы, используйте ls -sh в нужном каталоге.
Обычно веб-серверы (apache2, nginx) и приложения с высокой нагрузкой генерируют много логов; точный объём зависит от уровня логирования и трафика.
Установка logrotate (если он не установлен)
Во многих дистрибутивах logrotate уже установлен и имеет преднастроенные конфиги для популярных сервисов. Чтобы проверить наличие logrotate:
which logrotateЕсли команда не вернёт путь, установите пакет через менеджер пакетов. Для Debian/Ubuntu:
sudo apt-get install logrotateУстановка создаст глобальную конфигурацию по умолчанию. Если вы устанавливаете logrotate после установки веб-сервера, проверьте, создался ли конфиг в /etc/logrotate.d/ для этого сервиса; иногда пакеты веб-серверов добавляют файл конфигурации при установке своего пакета.
Как работает logrotate
Глобальная конфигурация — /etc/logrotate.conf. Большая часть настроек для отдельных сервисов лежит в /etc/logrotate.d/ — по одному файлу на приложение. Ниже — пример типичного конфига для nginx (/etc/logrotate.d/nginx), который можно использовать как шаблон:
/var/log/nginx/*.log {
weekly
missingok
rotate 52
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
prerotate
if [ -d /etc/logrotate.d/httpd-prerotate ]; then
run-parts /etc/logrotate.d/httpd-prerotate;
fi
endscript
postrotate
invoke-rc.d nginx rotate >/dev/null 2>&1
endscript
}Разбор ключевых параметров
Первый блок
/var/log/nginx/*.log { ... }указывает, какие файлы обрабатывать. Маска*.logсоответствует любым файлам с расширением .log.weekly— ротация раз в неделю. Вместо временной политики можно задать ротацию по размеру, напримерsize 25Mдля ротации при достижении 25 МБ.missingok— не генерировать ошибку, если лог отсутствует.rotate 52— хранить 52 старых архива. При weekly это эквивалентно хранению логов за год.compress— сжимать старые логи (обычно gzip).delaycompress— отложить сжатие на одну ротацию, чтобы избежать проблем с программами, которые продолжают писать в недавно закрытый файл.notifempty— не ротировать пустые файлы.create 0640 www-data adm— после ротации создать новый файл с правами 0640, владельцем www-data и группой adm. Проверяйте соответствие текущим правам логов (ls -la).

Примечание: строка -rw-r----- соответствует числу 0640 в октальном представлении.
sharedscripts— выполнять блокиprerotateиpostrotateодин раз для всего набора файлов, а не для каждого файла отдельно.prerotateиpostrotate— хуки до и после ротации. В них удобно вызывать команды для остановки/перезапуска сервиса или дополнительных действий: резервное копирование логов, отправка на удалённое хранилище и т. п. В примере nginxpostrotateговорит системе уведомить nginx о смене логов:invoke-rc.d nginx rotate.
Если сервис не поддерживает «горячую» смену файлов логов, в хуке нужно выполнить рестарт или стоп/старт сервиса.
Logrotate запускается автоматически (обычно через cron или systemd timer), так что не нужно добавлять отдельные задачи — достаточно положить конфиг в /etc/logrotate.d/.
Практическая мини-методика настройки (шаги)
- Просканируйте
/var/log/и найдите крупные директории:du -h /var/log/ | sort -hr. - Для каждого крупного сервиса посмотрите текущую конфигурацию ротации в
/etc/logrotate.d/или создайте новый файл с нужными правилами. - Решите стратегию: по времени (daily/weekly/monthly) или по размеру (
size XXM). - Настройте
rotate N,compress/delaycompress,notifempty,createс правильными правами/владельцем. - Если нужно — добавьте
prerotate/postrotateдля безопасного перезапуска сервиса. - Протестируйте с помощью
logrotate -d /etc/logrotate.conf(режим dry-run) иlogrotate -f /etc/logrotate.conf(форсированная ротация).
Команды проверки
- Сухой запуск (только вывод, без изменений):
logrotate -d /etc/logrotate.conf- Форсированная ротация (применяет правила немедленно):
sudo logrotate -f /etc/logrotate.confУбедитесь, что результат соответствует ожиданиям, прежде чем оставить правила для автоматического запуска.
Шпаргалка по ключам logrotate
- daily / weekly / monthly — частота ротации
- size X — ротация при достижении размера X (K, M, G)
- rotate N — число сохраняемых архивов
- compress / delaycompress — сжатие и отложенное сжатие
- missingok — игнорировать отсутствие файла
- notifempty — пропуск пустых файлов
- create mode owner group — создать новый файл после ротации
- sharedscripts — выполнять хуки один раз
- prerotate / postrotate — скрипты до/после ротации
Когда logrotate может не подойти
- Системы, использующие systemd-journald в режиме forward-to-Syslog и хранение только в журнале systemd. В таком случае имеет смысл настраивать ротацию journald, а не logrotate.
- Приложения, которые постоянно держат дескриптор на старый файл и не реагируют на сигнал перезапуска: тогда нужно согласовать перезапуск приложения в хуках.
- Среды с требованием немедленной репликации логов в облако: лучше применять лог-агрегатор (rsyslog/Fluentd/Logstash) и отталкиваться от него.
Альтернативы и комплементарные подходы
- systemd-journald — хранит бинарные логи, управляется
journald.confиjournalctl. - rsyslog/syslog-ng с собственной ротацией или интеграцией с logrotate.
- Лог-агрегаторы (Fluentd, Logstash, Vector) — отправляют логи в централизованное хранилище и уменьшают нагрузку на локальные файлы.
- Скрипты собственного вида, если нужна кастомная логика (но они требуют сопровождения).
Эвристики и практические рекомендации
- Для веб-серверов с высоким трафиком используйте ротацию по размеру (например,
size 50M) вместо времени. - Храните минимально необходимую историю — укажите
rotateисходя из длительности расследования инцидентов (N недель/дней). - Всегда проверяйте
createи права — недоступный лог может помешать работе сервиса. - Используйте
delaycompress, если заметны ошибки, связанные с одновременной записью и сжатием.
Чек-лист по ролям
Для системного администратора
- Проверить наличие logrotate:
which logrotate. - Просканировать
/var/log/на большой объём. - Настроить файлы в
/etc/logrotate.d/с соответствующими правами. - Протестировать
logrotate -dиlogrotate -f.
Для разработчика приложения
- Убедиться, что приложение корректно реагирует на переоткрытие логов (SIGHUP или аналог).
- Документировать требуемые права на файлы логов.
- Предложить формат логирования, удобный для агрегации.
Для инженера по мониторингу
- Отслеживать размер /var/log/ и количество старых архивов.
- Настроить алерты на превышение порога дискового пространства.
Критерии приёмки
- После форсированной ротации (
logrotate -f) старые файлы перемещены/сжаты согласно правилам. - Права и владельцы новых файлов соответствуют
createв конфиге. - Сервис продолжает писать логи после
postrotateбез ошибок. - Общий объём логов находится в ожидаемых пределах через заданный интервал.
Примеры сценариев тестирования
- Тест ротации по размеру: сгенерировать файл > size, запустить
logrotate -fи проверить создание архива. - Тест хуков: в
postrotateдобавить простую командуtouch /tmp/nginx-rotatedи убедиться, что файл появился. - Тест прав: установить нестандартные права на лог, настроить
createи проверить совпадение.
Типичные ошибки и их устранение
- Неправильные права после ротации — проверьте
createи владельца. - Приложение не пишет в новый файл — убедитесь, что в
postrotateвы выполнили перезагрузку или сигнал для переоткрытия логов. - Сжатие ломает парсеры — проверьте совместимость формата с вашими инструментами анализа.
Важно: не удаляйте файлы логов вручную, пока процесс, записывающий в них, всё ещё активен — лучше использовать механизмы ротации.
Конфигурационные подсказки и шаблоны
Минимальный шаблон для приложения:
/var/log/myapp/*.log {
size 100M
rotate 7
compress
delaycompress
missingok
notifempty
create 0640 myapp mygroup
sharedscripts
postrotate
systemctl reload myapp.service >/dev/null 2>&1 || true
endscript
}Если вы хотите держать логи за 30 дней при ежедневной ротации, используйте daily и rotate 30.
Безопасность и приватность
- Следите за правами доступа к архивам логов: в логах часто встречаются персональные данные и секреты.
- Если лог-файлы содержат персональные данные, продумайте политику хранения и удаление в соответствии с требованиями (включая возможные юридические ограничения).
Быстрый план отката при проблемах
- Восстановите исходный конфиг из резервной копии
/etc/logrotate.d/. - Верните права и владельцев на файлы логов (из резервной копии или по умолчанию).
- Выполните форсированную ротацию с dry-run и затем примените изменения.
- Если сервис перестал писать логи — выполните рестарт/перезапуск согласно документации сервиса.
Рекомендации по развитию: maturity levels
- Начальный: использовать базовые конфиги из пакетов дистрибутива.
- Средний: кастомные конфиги для критичных сервисов, мониторинг объёма логов.
- Продвинутый: централизованный сбор логов + минимизация локального хранения, автоматизация на этапе деплоя.
Короткое резюме
- Logrotate — простой и надёжный инструмент для управления файловыми логами.
- Настройте ротацию по размеру или времени, укажите количество архивов и права через
create. - Используйте хуки для корректного перезапуска сервисов, тестируйте в dry-run режиме.
- Рассмотрите централизованные решения для долгосрочного хранения и анализа логов.
Дополнительные ресурсы: ман-страница man logrotate и каталоги /etc/logrotate.d/ и /var/log/.
Похожие материалы
Как раздать интернет со смартфона
Ярлык для поиска по сайту на iPhone
Портфолио писателя в Contently — как создать
Вернуть удалённые функции Windows 8
OneDrive на Linux: установить, синхронизировать и управлять