Управление логами с помощью logrotate на Debian 9
Настройка logrotate для управления системными и прикладными журналами.
Logrotate — один из базовых инструментов администрирования. Он помогает поддерживать порядок в системе и предотвращает переполнение диска. При работе с виртуальными серверами или выделенными серверами корректная настройка ротации журналов обеспечивает стабильность и предсказуемость работы сервисов.
На Debian 9 logrotate установлен по умолчанию и настроен для обработки журналов всех системных пакетов и приложений.
Проверка установки
logrotate --version
Вывод команды:
logrotate 3.11.0
Структура конфигурации
Конфигурация logrotate хранится в двух местах:
/etc/logrotate.conf— основной файл с глобальными параметрами по умолчанию и шаблонами для несистемных файлов/etc/logrotate.d/— каталог с отдельными конфигурациями для конкретных сервисов и приложений
Пример конфигурации для пакетного менеджера apt:
cat /etc/logrotate.d/apt
Вывод:
/var/log/apt/term.log {
rotate 12
monthly
compress
missingok
notifempty
}
/var/log/apt/history.log {
rotate 12
monthly
compress
missingok
notifempty
}
Файл содержит два блока — для term.log и history.log. Любые параметры, не указанные в блоке, наследуются из /etc/logrotate.conf.
Описание директив:
rotate 12— хранить последние 12 архивных копий логаmonthly— выполнять ротацию раз в месяцcompress— сжимать архивы (по умолчанию используется gzip)missingok— не выдавать ошибку, если лог-файл отсутствуетnotifempty— не ротировать пустые файлы
Способ 1. Конфигурация в /etc/logrotate.d/
Этот вариант подходит для большинства случаев: конфигурация запускается ежедневно от имени root вместе со всеми стандартными задачами logrotate.
В качестве примера настроим ротацию для приложения, которое пишет access.log и error.log в каталог /var/log/app/:
nano /etc/logrotate.d/app
/var/log/example-app/*.log {
daily
missingok
rotate 14
compress
notifempty
create 0640 www-data www-data
sharedscripts
postrotate
systemctl reload example-app
endscript
}
Описание директив:
create 0640 www-data www-data— создавать новый пустой файл журнала после ротации с правами0640, владельцем и группойwww-datasharedscripts— скрипты из блокаpostrotateвыполняются один раз после обработки всех файлов, а не для каждого файла отдельноpostrotate ... endscript— блок команд, выполняемых после ротации; в примере перезагружается приложение
После настройки проверьте конфигурацию в режиме отладки:
sudo logrotate /etc/logrotate.conf --debug
Команда выведет подробную информацию о том, какие файлы обрабатывает logrotate, без реального применения изменений.
Способ 2. Пользовательская конфигурация с запуском через cron
Этот вариант подходит, если нужна нестандартная периодичность ротации — например, каждый час. В таком случае конфигурацию размещают за пределами /etc/logrotate.d/ и запускают вручную через cron.
Допустим, приложение работает под пользователем testing и пишет логи в /home/testing/logs/. Создайте конфигурационный файл:
nano /home/testing/logrotate.conf
/home/testing/logs/*.log {
hourly
missingok
rotate 24
compress
create
}
Конфигурационный файл logrotate
Эта конфигурация будет ежечасно ротировать файлы, сохраняя 24 архивные копии и создавая новый файл журнала взамен повёрнутого.
Создайте тестовый файл журнала:
cd ~
mkdir logs
touch logs/access.log
Запустите logrotate вручную с указанием файла состояния:
logrotate /home/testing/logrotate.conf --state /home/testing/logrotate-state --verbose --force
Вывод:
reading config file /home/testing/logrotate.conf
Handling 1 logs
rotating pattern: /home/testing/logs/*.log hourly (24 rotations)
empty log files are rotated, old logs are removed
considering log /home/testing/logs/access.log
log does not need rotating
--state— указывает, где хранить информацию о последней ротации.--verbose— выводит подробный лог выполнения.--force— принудительно выполняет ротацию, даже если она ещё не нужна по расписанию.
Проверьте содержимое файла состояния:
cat /home/testing/logrotate-state
Logrotate фиксирует в этом файле, когда и какие журналы он последний раз обрабатывал.
Автоматизация через cron
Чтобы ротация выполнялась автоматически каждый час, добавьте задание в cron:
crontab -e
Добавьте в конец файла:
14 * * * * /usr/sbin/logrotate /home/testing/logrotate.conf --state /home/testing/logrotate-state
Задание cron для logrotate
Задача будет запускаться на 14-й минуте каждого часа ежедневно.
Помощь
Если у вас возникли вопросы или требуется помощь, пожалуйста, свяжитесь с нами через систему тикетов — мы обязательно вам поможем!