Управление логами с помощью 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