
Установка Logrotate для управления логами в Unix/Linux
Logrotate – это программа которая дает возможность управлять логами в системы Unix/Linux. Утилита выполняет автоматическую ротацию, удаление или сжатие логов. Logrotate помогает сохранять место на диске. Утилиту довольно просто настроить и сейчас, вы убедитесь в этом.
Установка Logrotate для управления логами в Unix/Linux
Я приведу наглядные примеры использования на различных Unix/Linux ОС.
Установка Logrotate для управления логами в Debian/Ubuntu
Обновим пакеты в ОС:
# apt-get update -y
Для установки используем:
# apt-get install logrotate -y
После чего, переходим к настройке и запуску логротейта.
Установка Logrotate для управления логами в CentOS/Fedora/RedHat
Обновим пакеты в ОС:
# yum update -y
Для установки используем:
# yum install logrotate -y
После чего, переходим к настройке и запуску логротейта.
Установка Logrotate для управления логами в Mac OS X
Выполняем установку HomeBrew — Установка Homebrew на Mac OS X и, выполним поиск пакета:
$ brew search logrotate
Для установки, служит команда:
$ brew install logrotate
После чего, переходим к настройке и запуску logrotate.
Настройка Logrotate для управления логами в Unix/Linux
Конфигурационный файл можно найти в :
# vim /etc/logrotate.conf
Мой конфиг выглядит следующим образом:
weekly create rotate 4 dateext 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/
Я не буду заморачиваться и пропишу один конфиг для всей ротации ( можно настраивать для каждого отдельно):
# vim /etc/logrotate.d/For_ALL
Прописываем:
/var/log/*.log { monthly size 100M rotate 7 compress delaycompress missingok notifempty create 644 root root }
Я беру все логи которые имеют любое название и заканчиваются на .log и отслеживаю их в интервале — месяц ( служит директива monthly). Если превышает размер лога (size 100M), то выполнить ротацию Ротация происходит после 7 дней ( файлы сохраняются 7 дней). Лог-файлы я сжимаю ( директива compress). Опция delaycompress задерживает выполнение сжатия до следующей ротации логов, но она работает только с параметром — compress. Параметр missingok дает возможность обрабатывать следующий лог если какой-то отсутствует и не выдавая об ошибке. С опций notifempty можно запретить ротацию пустых файлов. После ротации логов, все будет удалено и чтобы выполнялось сохранение логов, нужно создать файлы снова. Так вот, create позволяет это делать.
Если в конфиге используется опция size и интервал ротации (например, monthly), то именно опция size превзойдет опцию интервала ротации, — это означает что что логи будут ротироваться, как только размер файла превысит указанное значение, не дожидаясь истечения срока.
После чего, можно выполнить проверку того, что создали ( без его выполнения, только тест):
# logrotate -d /etc/logrotate.d/For_ALL
Если отладка не показала ничего плохого, можно запустить ротацию:
# logrotate -f -v /etc/logrotate.d/For_ALL
Вместо того, чтобы сжимать логи, можно переименовать их. Для этого есть директива dateext. Если наш формат даты отличается от yyyymmdd по умолчанию, мы можем указать его с помощью dateformat:
dateext dateformat -%d%m%Y notifempty
Так же, можно по окончанию, отправить письмо на указанный емейл:
mail mail_user@linux-notes.org
Если не хотите чтобы создавались пустые файлы после ротации, используйте:
nocreate
Не откладывать сжатие файла на следующий цикл
nodelaycompress
Если не хотите отправлять старые логи на почту, то юзайте:
nomail
Сохранять все логи в одной и той же папке:
noolddir
Интервалы для ротации:
daily weekly monthly yearly
Размеры для ротации (после превышения указанного размера, будет выполнятся ротация):
size 6k size 66M size 66G
Можно посылать произвольные команды после выполнения ротации, например:
postrotate echo "Ротация выполнена!" | mail root endscript
Данную утилиту, нужно запускать:
# logrotate /etc/logrotate.d/For_ALL
Можно автоматизировать и закинуть «logrotate» команду в crontab.
PS: По умолчанию, это возможно уже сделано:
# ls /etc/cron.daily/ cups logrotate makewhatis.cron mlocate.cron prelink readahead.cron tmpwatch
Например, файл конфигурации для apache2 выглядит следующим образом:
/var/log/apache2/*.log { weekly missingok rotate 2 compress delaycompress notifempty create 640 root root sharedscripts postrotate if [ -f "`. /etc/apache2/envvars ; echo ${APACHE_PID_FILE:-/var/run/apache2.pid}`" ]; then /etc/init.d/apache2 reload > /dev/null fi endscript }
Ротация производится раз в неделю. При отсутствии лога — не выводить ошибку. Сохранять 2 последних ротированных фалов и конечно же, сжимать их, но для пустых файлов никаких действий не выполнять. После того, как ротация прошла, создавать пустой файл с указанными правами.
Опции Logrotate
Наиболее часто использующиеся опции:
-d — Данная опция, дает возможность включить отладочный режим, который использует «-v» параметр. В этом режиме, ничего не будет выполнятся и применятся.
-f, —force — Данная опция, дает возможность принудительно запустить logrotate и запустить ротацию логов. Иногда бывает полезным, например — когда добавили новый функционал в конфиг или старые логи удалены вручную и чтобы не создавать новые файлы вручную, можно запустить логротейт с данной опцией.
-m, —mail command — Позволяет указывать команду для отправки лог-файлов по почте и она должна содержать входные параметры:
- заголовок письма
- получателя письма
После выполнения, логи будут отправлены на указанное мыло ( команда читает данные со стандартного входа STDIN), а командой по умолчанию — /usr/bin/mail -s.
-s, —state statefile — Данная опция позволяет задавать произвольный файл с состоянием. Это хорошо использовать тогда, когда в системе имеется несколько пользователей, которые работают ( запускают) с logrotate. По умолчанию, данный фал сохраняется в /var/lib/logrotate/status.
—usage — Показать мануал по использованию данной утилиты.
-v, —verbose — Данная опция, позволяет выводит все происходящее на экран ( весь вывод).
Вот и все, статья «Установка Logrotate для управления логами в Unix/Linux» завершена!
После ротации лога, демон продолжает писать в этот же файл, т.е. был logfile.log, сейчас logfile.log.1 и сам лог по прежнему пишется в него. При это создан logfile.log который остаётся пустым.