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

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

Logrotate — один из тех инструментов, которые незаметно поддерживают порядок на сервере. Он не даёт лог-файлам бесконтрольно разрастаться и съедать дисковое пространство — а это особенно критично на VPS и выделенных серверах, где каждый гигабайт на счету.

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

Прежде чем переходить к настройке, убедитесь, что 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.d/ могут переопределять их по мере необходимости.

Основные директивы

  • 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 — хранится две недели архивов
  • compress — старые логи сжимаются через gzip
  • notifempty — пустые файлы не ротируются
  • create 0640 www-data www-data — новый файл создаётся с правами 0640 и владельцем www-data
  • postrotate ... endscript — после ротации приложение перезагружается и начинает писать в новый файл

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

Тестовый запуск без реального применения изменений:

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

Помощь

Если у вас возникли вопросы или требуется помощь, пожалуйста, свяжитесь с нами через систему тикетов — мы обязательно вам поможем!

Обновлено:
Нужна помощь?Наши инженеры бесплатно помогут с любым вопросом за считанные минутыНаписать нам