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

Управление логами с помощью 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
Автор
Редакция

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

Как раздать интернет со смартфона
Мобильные сети

Как раздать интернет со смартфона

Ярлык для поиска по сайту на iPhone
Руководство

Ярлык для поиска по сайту на iPhone

Портфолио писателя в Contently — как создать
Контент-маркетинг

Портфолио писателя в Contently — как создать

Вернуть удалённые функции Windows 8
Windows

Вернуть удалённые функции Windows 8

OneDrive на Linux: установить, синхронизировать и управлять
Linux

OneDrive на Linux: установить, синхронизировать и управлять

Вкладки в Проводнике Windows — Groupy и альтернативы
Windows

Вкладки в Проводнике Windows — Groupy и альтернативы