С помощью утилиты logrotate можно настроить автоматическое удаление (чистку) лог-файлов. В противном случае, некоторые логи могут заполнить все дисковое пространство, что приведет к проблемам в работе операционной системы.
Чаще всего, в Linux данная утилита установлена по умолчанию. Если это не так, установка выполняется следующими командами.
Ubuntu / Debian:
apt-get install logrotate
CentOS / Red Hat:
yum install logrotate
FreeBSD:
pkg install logrotate
Утилита не работает как служба, поэтому нет необходимости в ее запуске или перезагрузке (logrotate start или logrotate restart делать не нужно).
Для приложение, ротация логов настраивается в отдельных файлах, расположенных по пути /etc/logrotate.d/ (во FreeBSD — /usr/local/etc/logrotate.d/).
К примеру, нам необходимо настроить ротацию лога для logstash-forwarder. Создаем файл со следующим содержимым:
vi /etc/logrotate.d/logstash
/var/log/logstash-forwarder/* { rotate 30 size=10M missingok notifempty daily compress delaycompress maxage 30 create 0644 root root postrotate /usr/bin/systemctl restart logstash-forwarder endscript}
* где:
* /var/log/logstash-forwarder/* — путь к файлу, который нужно ротировать. * указывает, что нужно чистить все файлы, которые расположены в каталоге /var/log/logstash-forwarder.* напомню, что во FreeBSD, путь будет /usr/local/etc/logrotate.d/logstash.
При настройке необходимо проверять работу сервиса после ротации лога. Некоторые службы могут перестать работать без лог-файла. В данном случае, необходимо создавать новый (create). Также, в некоторых случаях, сервис необходимо перезапускать, так как при создании нового файла меняется его дескриптор.
Запуск выполняется со следующим синтаксисом:
logrotate -f <путь к файлу конфигурации>
Например:
logrotate -f /etc/logrotate.d/logstash
Задание на автоматический запуск создается по умолчанию в файле /etc/cron.daily/logrotate. Если изучить его содержимое, мы увидим, что идет запуск logrotate, который читает все файлы в директории /etc/logrotate.d/ и выполняющий для каждого из них ротацию.
Если для какого-то приложения необходимо выполнять ротацию лога по особому расписанию, узнаем полный путь до утилиты logrotate:
which logrotate
* в моем случае, это было /usr/sbin/logrotate.
Получив путь, создаем правило в cron:
crontab -e
0 0 * * * /usr/sbin/logrotate -f /etc/logrotate.d/logstash
* в данном примере в 00:00 будет запускаться logrotate и чистить логи с нашей настройкой для logstash-forwarder.
или запуск чистки всех логов:
0 0 * * * /usr/sbin/logrotate -f /etc/logrotate.conf
Продолжая использовать данный сайт вы принимаете политику конфиденциальности и cookies