← Назад к вопросам

Что такое logrotate?

1.3 Junior🔥 142 комментариев
#Другое

Комментарии (2)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое Logrotate?

Logrotate — это утилита для управления логами в системах на базе Linux/Unix, предназначенная для автоматического ротации (переключения), сжатия, удаления и рассылки файлов логов. В контексте DevOps, это критически важный инструмент для поддержания порядка в системе, предотвращения заполнения дискового пространства и обеспечения структурированного хранения журналов для последующего анализа и аудита.

Основная проблема, которую решает logrotate

Без ротации логи (особенно активных приложений, таких как веб-серверы, базы данных или прикладные сервисы) могут расти неограниченно, что приводит к:

  • Исчерпанию дискового пространства и падению сервисов или всей системы.
  • Затруднению поиска нужной информации в огромных файлах.
  • Падению производительности при чтении/записи очень больших файлов.

Logrotate решает эти проблемы, периодически "переключая" текущий лог-файл на новый, а старый — архивируя, переименовывая или удаляя по заданным правилам.

Ключевые возможности и принцип работы

Работа logrotate основана на конфигурационных файлах, главный из которых — /etc/logrotate.conf. Он включает в себя настройки по умолчанию и может содержать директивы для конкретных сервисов, которые часто размещаются в /etc/logrotate.d/.

Основные действия (директивы) в конфигурации:

  • rotate [count]: Указывает, сколько архивных (ротированных) копий логов хранить до удаления. Например, rotate 4 сохранит 4 архива.
  • daily, weekly, monthly: Частота ротации. Наиболее распространена daily.
  • size [size]: Ротация при достижении файлом определённого размера (например, size 100M, size 1G). Этот параметр имеет приоритет над временными интервалами.
  • compress: Сжатие старых логов (обычно с помощью gzip). Архивы получают расширение .gz.
  • delaycompress: Откладывает сжатие на один цикл (полезно, если на файл ещё может что-то писать).
  • missingok: Не генерировать ошибку, если лог-файл отсутствует.
  • notifempty: Не ротировать пустые файлы.
  • create [mode] [owner] [group]: Создать новый пустой лог-файл после ротации с заданными правами и владельцем (например, create 0644 www-data www-data для nginx).
  • postrotate/endscript: Блок команд (чаще всего перезагрузка или сигнал сервису), который выполняется после ротации. Критически важно для приложений, которые не умеют автоматически переоткрывать файловые дескрипторы логов.
  • sharedscripts: Гарантирует, что скрипты из postrotate выполнятся только один раз, даже если ротации подвергаются несколько файлов по одному шаблону.

Пример конфигурации для веб-сервера Nginx

# /etc/logrotate.d/nginx
/var/log/nginx/*.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    create 0640 www-data adm
    sharedscripts
    postrotate
        # Отправляем сигнал USR1 master-процессу nginx для переоткрытия логов
        if [ -f /var/run/nginx.pid ]; then
            kill -USR1 `cat /var/run/nginx.pid`
        fi
    endscript
}

Эта конфигурация означает:

  1. Ротация всех .log файлов в /var/log/nginx/ будет производиться ежедневно.
  2. Будет храниться 14 архивных копий (две недели).
  3. Архивы будут сжаты (кроме последнего, из-за delaycompress).
  4. После ротации будет создан новый лог-файл с правами 0640 и владельцем www-data:adm.
  5. Сервису Nginx будет отправлен сигнал USR1, чтобы он начал писать в новый файл, не требуя полной перезагрузки.

Как запускается Logrotate?

  • По расписанию: Основной способ — через cron. В типовых дистрибутивах (Ubuntu, CentOS) есть задача /etc/cron.daily/logrotate, которая запускает утилиту раз в день.
  • Вручную: Для принудительной ротации или тестирования конфигурации используется команда:
    logrotate -fv /etc/logrotate.conf
    
    Где `-f` — принудительный запуск, `-v` — подробный вывод, можно указать конкретный конфиг.

Значение для DevOps-инженера

С точки зрения DevOps, грамотная настройка logrotate — это часть инфраструктурной надежности и observability:

  1. Автоматизация рутины: Избавляет от ручного удаления или архивации логов.
  2. Стабильность: Прямо предотвращает инциденты, связанные с полным диском.
  3. Соответствие стандартам: Позволяет выполнять требования политик хранения логов (GDPR, PCI DSS, внутренние регламенты).
  4. Интеграция с мониторингом: Чёткая структура (логи за каждый день/неделю, сжатые архивы) упрощает настройку парсеров для систем мониторинга и анализа (ELK Stack, Loki, Splunk).
  5. Безопасность: Правильные права (create) на файлы логов предотвращают несанкционированный доступ или модификацию.

В современных облачных и контейнеризированных средах (Kubernetes, Docker) логи часто перенаправляются в stdout/stderr и собираются отдельными агентами (Fluentd, Filebeat), но на виртуальных машинах, bare-metal серверах или для системных сервисов logrotate остается стандартом де-факто для управления файловыми логами. Его понимание и умение настроить под конкретные нужды — обязательный навык для системного администратора и DevOps-специалиста.