Гид по технологиям

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

• 7 min read • Системное администрирование • Обновлено 13 Dec 2025
Управление логами с logrotate
Управление логами с logrotate

Логотип или схема управления логами

Быстрые ссылки

  • Что делает logrotate?

  • Установка logrotate (если он не установлен)

  • Как работает logrotate

Большинство сервисов в Linux генерируют файлы логов, обычно в каталоге /var/log/. Это обычные текстовые файлы, но они могут занимать много места — вплоть до полного заполнения диска. Logrotate помогает автоматически управлять этими файлами, чтобы предотвратить переполнение дискового пространства.

Что делает logrotate?

Logrotate управляет логами: архивирует текущий лог, создаёт новый пустой файл и удаляет самые старые архивы после заданного количества ротаций. По умолчанию для некоторых сервисов (например, nginx) может быть задано хранение логов длительное время, поэтому стоит проверить и подправить конфигурацию под ваши требования.

Определения

  • Лог: текстовый файл с записями событий приложения или сервиса.
  • Ротация: процесс переименования/архивации текущего лога и создания нового пустого файла.

Чтобы быстро выяснить, какие сервисы занимают больше всего места логами, используйте команду du:

du -h /var/log/ | sort -hr

Эта команда суммирует размеры директорий внутри /var/log/ и сортирует их в человекочитаемом виде. Результат покажет каталоги с наибольшим использованием диска:

/wordpress/wp-content/uploads/csit/2019/05/65436fe7-2.png

Учтите, что 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).

/wordpress/wp-content/uploads/csit/2019/05/65436fe7-1.png

Примечание: строка -rw-r----- соответствует числу 0640 в октальном представлении.

  • sharedscripts — выполнять блоки prerotate и postrotate один раз для всего набора файлов, а не для каждого файла отдельно.

  • prerotate и postrotate — хуки до и после ротации. В них удобно вызывать команды для остановки/перезапуска сервиса или дополнительных действий: резервное копирование логов, отправка на удалённое хранилище и т. п. В примере nginx postrotate говорит системе уведомить nginx о смене логов: invoke-rc.d nginx rotate.

Если сервис не поддерживает «горячую» смену файлов логов, в хуке нужно выполнить рестарт или стоп/старт сервиса.

Logrotate запускается автоматически (обычно через cron или systemd timer), так что не нужно добавлять отдельные задачи — достаточно положить конфиг в /etc/logrotate.d/.

Практическая мини-методика настройки (шаги)

  1. Просканируйте /var/log/ и найдите крупные директории: du -h /var/log/ | sort -hr.
  2. Для каждого крупного сервиса посмотрите текущую конфигурацию ротации в /etc/logrotate.d/ или создайте новый файл с нужными правилами.
  3. Решите стратегию: по времени (daily/weekly/monthly) или по размеру (size XXM).
  4. Настройте rotate N, compress/delaycompress, notifempty, create с правильными правами/владельцем.
  5. Если нужно — добавьте prerotate/postrotate для безопасного перезапуска сервиса.
  6. Протестируйте с помощью 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 без ошибок.
  • Общий объём логов находится в ожидаемых пределах через заданный интервал.

Примеры сценариев тестирования

  1. Тест ротации по размеру: сгенерировать файл > size, запустить logrotate -f и проверить создание архива.
  2. Тест хуков: в postrotate добавить простую команду touch /tmp/nginx-rotated и убедиться, что файл появился.
  3. Тест прав: установить нестандартные права на лог, настроить 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.

Безопасность и приватность

  • Следите за правами доступа к архивам логов: в логах часто встречаются персональные данные и секреты.
  • Если лог-файлы содержат персональные данные, продумайте политику хранения и удаление в соответствии с требованиями (включая возможные юридические ограничения).

Быстрый план отката при проблемах

  1. Восстановите исходный конфиг из резервной копии /etc/logrotate.d/.
  2. Верните права и владельцев на файлы логов (из резервной копии или по умолчанию).
  3. Выполните форсированную ротацию с dry-run и затем примените изменения.
  4. Если сервис перестал писать логи — выполните рестарт/перезапуск согласно документации сервиса.

Рекомендации по развитию: maturity levels

  • Начальный: использовать базовые конфиги из пакетов дистрибутива.
  • Средний: кастомные конфиги для критичных сервисов, мониторинг объёма логов.
  • Продвинутый: централизованный сбор логов + минимизация локального хранения, автоматизация на этапе деплоя.

Короткое резюме

  • Logrotate — простой и надёжный инструмент для управления файловыми логами.
  • Настройте ротацию по размеру или времени, укажите количество архивов и права через create.
  • Используйте хуки для корректного перезапуска сервисов, тестируйте в dry-run режиме.
  • Рассмотрите централизованные решения для долгосрочного хранения и анализа логов.

Дополнительные ресурсы: ман-страница man logrotate и каталоги /etc/logrotate.d/ и /var/log/.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро