Управление логами с помощью 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-20250918missingok— не выдавать ошибку, если лог-файл отсутствует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— старые логи сжимаются через gzipnotifempty— пустые файлы не ротируютсяcreate 0640 www-data www-data— новый файл создаётся с правами0640и владельцемwww-datapostrotate ... 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
Помощь
Если у вас возникли вопросы или требуется помощь, пожалуйста, свяжитесь с нами через систему тикетов — мы обязательно вам поможем!