Saturday, December 24, 2011

Ротация логов в Linux

Cегодня я хотел бы рассказать о ротации лог-файлов для веб-сервера Apache, либо любой другой службы которая создает логи и которые необходимо ротировать.
Начну с настройки на Линуксе, а именно на ОС Slackware (в RedHat и CentOS аналогично). Ротацию логов я буду осуществлять с помощью logrotate, конфигурационный файл которого расположен в:
# /etc/logrotate.conf
Итак открываем файл logrotate.conf любым редактором и вставляем следующие строки:
/var/log/apache/error_log (полный путь для лог-файла)
(в CentOS это /var/log/httpd/error_log)
{
rotate 5 (кол-во хранимых сжатых фрагментов)
size=10M (максимальный размер несжатого файла (в мегабайтах).
Пока размер текущего файла журнала не превысит данный порог,
файл не будет "ротирован")

missingok (отсутствие файла не является ошибкой)
nocopytruncate (не сбрасывать файл журнала после копирования)
nocreate (не создавать пустой журнал)
nodelaycompress (не откладывать сжатие файла на следующий цикл)
nomail (не отправлять содержимое удаляемых журналов по почте)
notifempty (не обрабатывать пустые файлы)
noolddir (держать все файлы в одном и том же каталоге)
compress (сжимать ротируемые фыйлы)
postrotate
/usr/bin/killall  -HUP  httpd
endscript (между postrotate и endscript расположены команды
интерпретатора исполняемые непосредственно после ротации.
В данном случае сюда помещена команда killall,
перезапускающая httpd-сервер.
Это необходимо для нормальной процедуры ротации лог-файлов)
}/var/log/apache/access_log (полный путь для лог-файла)
(в CentOS это /var/log/httpd/access_log)
{
rotate 4

weekly (производить ротацию регулярно, раз в неделю)
missingok
nocopytruncate
nocreate
nodelaycompress
 
nomail
notifempty
noolddir
compress
postrotate
/usr/bin/killall -HUP httpd
endscript
}
Как вы можете видеть в блоке где происходит ротация error_log, момент ротации наступает по достижению размера в 5 Мегабайт. Напротив, в блоке access_log ротация будет происходить раз в  неделю, либо если раз в месяц (вместо weekly, ставим – monthly).
Ротация файлов может происходить как вручную с помощью команды:
# /usr/sbin/logrotate –s /var/log/logrotate.state /etc/logrotate.conf
Либо с помощью планировщика заданий Cron:
* 22 * * * /usr/sbin/logrotate –s /var/log/logrotate.state /etc/logrotate.conf
На этом все, но продолжение как всегда следует…
PS
Для ротации файла maillog, вместо /usr/bin/killall -HUP httpd – пишем
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true

itpad.ru

No comments:

Post a Comment