Янв 24 2010

Logrotate. Установка и настройка.

В базововй поставке FreeBSD присутствует утилита дла ротейта логов newsyslog. Естественно в большинстве случаев для работы достаточно ее. Но я стараюсь найти утилиту которая позволит мне выполнять как можно меньше рутинной работы, а добавление каждого логфайла на ротейт, по моему глубокому убеждению, ничем иным от рутины и не назовешь. Особенно, если присутствует большое число виртуальных серверов апача или nginx и особенно если они постоянно добавляются. Так вот logrotate позволяет настраивать ротейт для групп файлов по маске. Что сразу снимает проблему по настроке персонального ротейта для каждого виртуального хоста.

Установим logrotate из портов:

cd /usr/ports/sysutils/logrotate/
make install clean

Процесс установки не задает лишних вопросов и устанавливается быстро и просто.
Теперь переходим к настройке. Основной файл настроек находится в /usr/local/etc и называется logrotate.conf. Правда после установки он называется logrotate.conf.sample, но это легко исправить:

mv logrotate.conf.sample logrotate.conf

Выглядит он так:

# see "man logrotate" for details
# rotate log files weekly
weekly
 
# keep 4 weeks worth of backlogs
rotate 4
 
# send errors to root
errors root
 
# create new (empty) log files after rotating old ones
create
 
# uncomment this if you want your log files compressed
compress
 
# RPM packages drop log rotation information into this directory
include /usr/local/etc/logrotate.d
 
/var/log/lastlog {
    monthly
    rotate 1
}
 
# system-specific logs may be configured here

Поскольку я использую в системе и logrotate и newsyslog, то для того, что бы они не пересекались на ротейте /var/log/lastlog я немного изменяю logrotate.conf, у меня он выглядит так:

# see "man logrotate" for details
# rotate log files weekly
weekly
 
# keep 4 weeks worth of backlogs
rotate 4
 
# send errors to root
errors root
 
# create new (empty) log files after rotating old ones
create
 
# uncomment this if you want your log files compressed
compress
 
# RPM packages drop log rotation information into this directory
include /usr/local/etc/logrotate.d

Я просто убрал строки:

/var/log/lastlog {
    monthly
    rotate 1
}

А теперь можно переходить к самому интересному. У меня в /var/log/nginx пишутся логи nginx, их я и хочу ротировать не разбираясь, все подряд.
Для этого сначала создадим директорию /usr/local/etc/logrotate.d

mkdir /usr/local/etc/logrotate.d

В нее мы будем размещать настройки ротации.
И разместим такой файл, я назвал его nginx:

/var/log/nginx/*.log {
        daily
        missingok
        rotate 30
        compress
        delaycompress
        notifempty
        create 640 root
        sharedscripts
        postrotate
                [ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
        endscript
}

В этом файле настройки такие:
daily — ротацию проводить раз в день
missingok — не генерировать ошибку при отсутствии файлов
rotate 30 — число отротейтченых файлов, то есть к примеру ротейт hilik.org.ua.access.log будет содержать 30 файлов, при превышении этого числа самый старый будет заменятся.
compress — сжимать файлы при ротейте
delaycompress — первый ротированный файл не сжимать
notifempty — уведомлять о том что файл был пустой.
create 640 root — с какими правами и владельцем будет создан новый файл
sharedscripts — выполнять действия описанные в postrotate 1 раз, а не на каждый файл
postrotate — что делать по окончании ротейита файлов — в нашем случае мы посылаем nginx сигнал, что бы он начал писать в новые файлы.

После того как мы настроили logrotate, остается настроить его запуск. Поставим его в системный crontab(/etc/crontab)

0       *       *       *       *       root    /usr/local/sbin/logrotate /usr/local/etc/logrotate.conf

Я установил вызов logrotate 1 раз в час, по тому же принциыпу, что и newsyslog, ведь вам, так как и мне может понадобится ротация по размеру, а для нее нужен вызов как минимум 1 раз в час.
И раз я уже затронул этот вопрос, для настройки ротации по размеру нужно указывать ключевое слово size, единицы измерения по умолчанию килобайты, для указания размера в мегабайтах, нужно указывать еще букву M, после цифр.

Добавить в закладки:

google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru

Украинская Баннерная Сеть