Ноя 14 2009

newsyslog. Настраиваем ротацию логов.

Помимо настройки логирования есть еще не менее важная процедура ротации логов. Ротация логов, это когда текущий лог файл закрывается для записи, создается новый файл, в который начинают писаться новые события, текущий фал переименовывается, возможно архивируется, а старые файлы удаляются. Важность процедуры ротации логов, должна быть понятна любому системному администратору. Ведь если неправильно настроить ротацию, можно либо получить потерю записей о важных и еще актуальных событиях, при черезчур частых ротациях и недостаточном количестве сохраняемых архивных фалов. Или наоборот при, редкая ротация или черезмерное количество архивных файлов приведет к тому, что место для записи логов закончится и они перестанут писаться, что приведет к потере актуальной информации о событиях. А некоторые, не достаточно корректно написанные программы, могут аварийно завершать свою работу, при невозможности записать событие в лог файл.

Наличие лог файлов, иногда оказывается единственной информацией о произошедшем событии поэтому, наличие правильно настроенной системы логирования и ротации логов, очень важно для администратора.
Во FreeBSD, в ее базовую систему, входит newsyslog, который и занимается всеми вышеописанными процедурами. Запускается он из крона, один раз в час и выполняет обработку всех файлов описанных в своем файле настроек /etc/newsyslog.conf.
Принимать решение о ротайции файла newsyslog может в зависимости от времени, например раз в сутки в 12 часов ночи, или раз в неделю, или по размеру файла. Точно так же описывается количество архивных файлов, которые нужно сохранять, и в завершении ротации файла, если описано, newsyslog может послать сигнал программен, которая пишет ротируемый лог файл.
Например ротация файла /var/log/maillog описывается так:

/var/log/maillog                        640  7     *    @T00  JC

Это стандартная запись, и в ней, первое поле — это полный путь к файлу, который нужно обрабатывать, 640 — это права файла, цифра 7 означает что сохранять нужно 7 архивных файлов, при создании восьмого, самый старый файл удаляется, звездочка означает что ротацию файла нужно проводить при любом размере, @T00 означает, что ротация проводится в 0 часов и флаги JC это означает что ротируемый файл нужно нужно при отсутствии создать(флаг С) и сжимать для сохранности места(флаг J).
В этом примере пропищены поля, первое после имени файла, туда можно внести владельца и группу, и в конце, если лог ведет не syslogd, а программа, то нужно указать pid-файл программы и в последнем поле, номер сигнала, который нужно послеть программе, что бы она начала писать в новый файл. Выглядит это так:

/var/log/nginx/nginx-error.log    www:www      644  7     *    @T00  JC  /var/run/nginx.pid 30

Эту строку я использую для ротации логов nginx. Файл создается от пользователя и группы www, в конце указан pid-файл и сигнал.

В случае ротации файла по размеру, настройки выглядят так:

/var/log/messages                       644  5     100  *     JC

Здесь в поле размер указано 100 — это размер файла в килобайтах, при превышении этого размера, newsyslog принимает решение о ротации файла. А в поле когда, стоит *, что означает в любое время.

Помимо флагов JC, часто применяется флаг B, этот флаг означает, что ротируемый файл имеет бинарный формат. При ротации таких файлов, в них не добавляется строка logfile turned over.


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