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

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

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

Во 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.

http://www.hilik.org.ua/newsyslog-настраиваем-ротацию-логов/#more-3198

Обновлено: 12.03.2015