Установка Logrotate для управления логами в Unix/Linux

Установка 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» завершена!

One thought on “Установка Logrotate для управления логами в Unix/Linux

  1. После ротации лога, демон продолжает писать в этот же файл, т.е. был logfile.log, сейчас logfile.log.1 и сам лог по прежнему пишется в него. При это создан logfile.log который остаётся пустым.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.