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, после цифр.
Комментариев нет
Комментариев нет.
RSS-лента комментариев к этой записи. TrackBack URI

