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

Настройка logrotate на Centos 7 для управления системными и прикладными журналами

Logrotate — один из базовых инструментов администрирования. Он помогает поддерживать порядок в системе и предотвращает переполнение диска. При работе с виртуальными серверами или управлении проектами на выделенных серверах корректная настройка ротации журналов обеспечивает стабильность и предсказуемость работы сервисов.

В этой статье мы рассмотрим, как правильно настроить logrotate для системных и прикладных журналов.


Проверка установленной версии logrotate

Прежде чем настраивать ротацию логов, убедитесь, что утилита logrotate установлена и работает корректно. Обычно на Centos 7 она уже присутствует. Для проверки используйте команду:

logrotate --version

Ожидаемый результат:

logrotate 3.18.0

Если версия отображается корректно, утилита готова к дальнейшей настройке.


Конфигурация logrotate состоит из двух основных частей:

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

Эти файлы определяют, какие логи подлежат ротации, как часто это делать, сколько старых копий хранить и в каком виде (сжатые или нет).


Файл /etc/logrotate.conf задаёт общие параметры ротации. Его можно открыть любым текстовым редактором, например vi:

vi /etc/logrotate.conf

Пример содержимого:

# Ротация логов раз в неделю
weekly

# Хранить 4 старых архива
rotate 4

# Создавать новый пустой файл после ротации
create

# Добавлять дату в имя архивных файлов
dateext

# Сжимать старые логи (раскомментируйте при необходимости)
#compress

# Подключать дополнительные конфигурации из каталога /etc/logrotate.d
include /etc/logrotate.d

# Настройки для системных логов
/var/log/wtmp {
    monthly
    create 0664 root utmp
    minsize 1M
    rotate 1
}

/var/log/btmp {
    missingok
    monthly
    create 0600 root utmp
    rotate 1
}

Файл /etc/logrotate.conf определяет параметры, применяемые по умолчанию. Если в конфигурации для конкретного сервиса они не переопределены, будут использоваться именно эти значения.


Наиболее часто используемые директивы:

  • daily / weekly / monthly / size — определяет периодичность ротации (по времени или при достижении размера).
  • rotate N — количество архивных копий, которые следует хранить.
  • create — создавать новый пустой файл после ротации с сохранением прав доступа и владельца.
  • compress — сжимать старые архивы (обычно в формат gzip).
  • dateext — добавлять дату к имени файла (например, access.log-20250918).
  • missingok — не выдавать ошибку, если указанный лог отсутствует.
  • notifempty — не ротировать пустые журнальные файлы.
  • postrotate ... endscript — блок для выполнения команд после ротации (например, перезапуска службы).
  • maxage N — удалять архивы старше N дней.

Пример настройки для приложения

Приложение my-app сохраняет логи в каталог /var/log/my-app/. Для него можно создать отдельный конфигурационный файл:

vi /etc/logrotate.d/my-app

Пример содержимого:

/var/log/my-app/*.log {
    daily
    missingok
    rotate 14
    compress
    notifempty
    create 0640 www-data www-data
    sharedscripts
    postrotate
        systemctl reload my-app
    endscript
}

Пояснения к параметрам:

  • daily — ротация выполняется ежедневно.
  • rotate 14 — хранится 14 архивных копий.
  • compress — старые логи сжимаются.
  • notifempty — пустые файлы игнорируются.
  • create 0640 www-data www-data — создаётся новый файл с правами 0640 и владельцем www-data.
  • postrotate … endscript — после ротации выполняется команда systemctl reload my-app.

Проверка конфигурации

Проверка в режиме отладки:

sudo logrotate /etc/logrotate.conf --debug

Проверка отдельного файла:

sudo logrotate -d /etc/logrotate.d/my-app

Принудительная ротация:

sudo logrotate /etc/logrotate.conf --force

Ротация логов в пользовательских каталогах

Если приложение сохраняет логи, например, в /home/user/logs/, создаётся отдельный конфигурационный файл:

vi /home/user/logrotate.conf

Пример содержимого:

/home/user/logs/*.log {
    hourly
    missingok
    rotate 24
    compress
    create
}

Создание каталога и тестового файла:

mkdir ~/logs
touch ~/logs/access.log

Принудительная ротация с сохранением состояния:

logrotate /home/user/logrotate.conf \
  --state /home/user/logrotate-state \
  --verbose --force
  • --state указывает, где хранить информацию о ротации.
  • --verbose выводит подробные сообщения о процессе.

Автоматизация через cron

Для регулярного выполнения ротации можно использовать cron. Откройте таблицу заданий:

crontab -e

Пример задания для запуска каждый час (на 14-й минуте):

14 * * * * /usr/sbin/logrotate /home/user/logrotate.conf --state /home/user/logrotate-state
Нужна помощь?Наши инженеры бесплатно помогут с любым вопросом за считанные минутыНаписать нам