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.