Статья об удобном средстве работы с системными журналами во FreeBSD - newsyslog. Статья является переводом текста Майкла Лукаса (Michael Lucas).Файлы журналов растут. Собственно говоря для этого они и предназначены. Как системный администратор, вы должны иметь способ контролировать их рост. Для этого FreeBSD имеет стандартное средство – newsyslog. Newsyslog позволяет вам осуществлять ротацию файлов журналов. Самые старые файлы удаляются, устаревшие последовательно переименовываются и, наконец, текущий лог замещается заново созданным. Утилита newsyslog может сжимать файлы журналов, перезапускать демонов и осуществлять всю необходимую поддержку выполнения рутинных операций по перетасовке файлов. По умолчанию система настроена на запуск newsyslog один раз в час, это делается при помощи демона cron. Newsyslog читает конфигурационный файл /etc/newsyslog.conf и проверяет каждый указанный там файл журнала. При совпадении указанного условия производится ротация соответствующего журнала. В файле /etc/newsyslog.conf каждая строка содержит конфигурацию ротации для одного файла журнала. /var/log/httpd-error.log root:wheel 600 30 * $MLH23 B /var/run/db.pid 2 В начале каждой строки указывается полное имя файла журнала, например /var/log/httpd-error.log. Второе поле (необязательное), которое, кстати не используется в поставляемом вместе с системой newsyslog.conf, это список из владельца и группы файла, разделенных двоеточием. Вот так: "root:wheel". Newsyslog может изменять владельца и группу и старых файлов журналов. По умолчанию владельцем устаревших журналов является пользователь root, группы wheel. Эту возможность вы можете с успехом применять на многопользовательских машинах. Вы можете указать изменение только владельца, или только группы. В этом случае вы должны будете использовать двоеточие с пустым местом там, где должен находиться неизменяемый параметр. Например ":www" сменит группу на "www", а "user827:" заменит владельца на "user827". Третье поле содержит режим доступа к устаревшим файлам журналов в стандартном трехциферном Unix-формате: 600 Четвертое поле - счетчик, указывающий newsyslog на количество
хранимых устаревших журналов. Newsyslog начинает отсчет файлов
с нуля. В то время как большинство программ начинают считать с нуля, newsyslog
включает 0 «по умолчанию» и считает файлы не учитывая нулевой. По умолчанию
для журнала /var/log/massages счетчик равен пяти, при этом /var/log содержит
следующие файлы: Те из вас, кто может сосчитать количество файлов, видят, что их шесть, а не пять, плюс еще и текущий файл журнала. Как правило, иметь большее количество журналов лучше, чем испытывать в них недостаток. В то же время, если вы испытываете недостаток свободного пространства на винчестере, то иногда вы будете испытывать искушение удалить один-два излишних журнала. Похожая ситуация возникает на некоторых веб-серверах, на которых размещены до нескольких сотен сайтов – несколько удаленных журналов каждого сайта в сумме могут составить достаточно большой объем свободного места. Пятое и шестое поля конфигурационной записи указывают newsyslog
размер и время при наступлении которых указанный файл необходимо
подвергнуть ротации. Можно осуществлять ротацию по достижении определенного
объема файла, или при наступлении определенного времени, или в обоих случаях.
Если указаны оба условия, то ротация будет происходить при выполнении
любого из них. Шестое поле, указывающее время, заставляет плакать новичков в системном
администрировании. Поле времени может содержать данные четырех типов:
«звездочку», число или два различных формата даты. Перейдем к седьмому полю - полю флагов. Это поле необязательно
для большинства журналов, однако для некоторых оно жизненно важно. Newsyslog
вставляет сообщение «logfile turned over» в каждый вновь созданный файл
журнала. Если журнал ведется в двоичном виде (как например /var/log/wtmp),
то добавление такого сообщения обязательно его испортит. Флаг «B» запрещает
newsyslog'у вставлять это сообщение. Восьмое поле задает путь к «pid-файлу» процесса пишущего
журнал. Использование pid-файлов является простым способом записи поля
ID процесса в системе, так что бы другие программы могли его легко прочитать.
Большинство программ хранят свои pid-файлы в каталоге /var/run – поглядите
них у себя на машине. Если в этом поле вы укажете полный путь к pid-файлу,
то newsyslog будет посылать сигнал этому процессу, когда будет производиться
ротация. Например веб-сервер Apache должен быть оповещен при ротации его
журналов. Записав в этом поле полный путь к его pid-файлу вы заставите
newsyslog посылать процессу Apache сигнал kill -1, что бы он запустил
свою часть обработки ротации журналов. Итак у вас есть журнал базы данных, который вы хотите ротировать в 23 часа в последний день каждого месяца. В документации базы данных сказано, что вы должны послать процессу базы сигнал прерывания (SIGINT или сигнал номер 2) после ротации. Вы хотите, что бы архивные журналы принадлежали пользователю "dbadmin" и читать их мог только он. Более того, журналы – двоичные файлы и должны быть не тронуты newsyslog'ом. Ваш newsyslog.conf должен выглядеть следующим образом: /var/log/database dbadmin: 600 30 * $MLH23 B /var/run/db.pid 2 Это крайний случай, в большинстве реальных ситуаций вам следует только собрать имя файла и условие ротации. |