Тонкости в работе syslogd. Ротация журнальных файлов. Программа logrotate.
Описание: В статье показано, как в системах Linux реализована работа с программами syslogd и logrotate и какие они выполняют задачи. Материал будет полезен начинающим системным администраторам, которые хотят разобраться с основами и принципами ведения журнальных файлов в GNU/Linux.
Введение
В Linux-системах ядро, демоны и системные утилиты генерируют журнальные данные, которые приходится группировать, сжимать, архивировать и, в конце концов, удалять. Правильный выбор тактики работы с такими файлами зависит от того, какое внимание уделяется вопросам обеспечения информационной безопасности и сколько имеется свободного места в дисковом пространстве. Но независимо от выбранной схемы управления процедурой журналирования, эта работа должна быть автоматизирована с помощью системных средств.
Всю журнальную информацию не рекомендуется уничтожать, потому что она требует тщательного анализа на предмет обнаружения попыток взлома системы и других вредоносных действий. Кроме того, эта информация может помочь инженеру выявить и устранить возникающие и уже имеющие место аппаратные и программные сбои.
Накапливающаяся информация со временем теряет некоторую актуальность для сиюминутного использования и, как правило, сжимается архивирующими утилитами через определенные интервалы времени. Методы реализации такой стратегии в системе называются ротацией. Система ротации предполагает хранение резервных журнальных файлов с разбивкой по времени их создания.
В основном, Linux-приложения записывают журнальную информацию в файлы, находящиеся в каталоге /var/log, а отдельные дистрибутивы используют для этого каталог /var/adm. Большинство журнальных файлов – это обычные текстовые файлы, в которые записываются сообщения о тех или иных событиях, происходящих в системе. Важно различать журнальную регистрацию на уровне ядра, на этапе начальной загрузки (журналы стартовых скриптов) и журналы демонов. Сообщения, генерируемые ядром, обрабатываются демоном klogd. Демон может или просто создать образ журнального буфера ядра и завершить работу, или динамически извлекать сообщения из буфера по мере их появления и записывать их в файл.
Регистрацией сообщений стартовых скриптов в отдельных системах занимается программа initlog.
Утилита, которая присутствует практически во всех дистрибутивах Linux и занимается журнальной ротаций, называется logrotate.
А полнофункциональная система регистрации событий, написанная Эриком Оллманом и решающая вопросы автоматизации ведения журнальных файлов и управления журнальной регистрацией, называется syslogd.
Программа Syslogd
До появления системы syslogd любая программа самостоятельно выбирала схему регистрации событий и место сохранения результирующей информации. С появлением syslogd все изменилось с точностью до наоборот. Помимо высокой гибкости в вопросах конфигурирования, syslogd позволяет сортировать сообщения по их источникам и уровню важности и направлять их в различные точки сбора – в журнальные файлы, на терминалы пользователей или на другие компьютеры в сети.
В состав системы журнальной регистрации входят демон syslogd, библиотеки, при помощи которых программы могут отсылать сообщения этому демону и программа logger, применяемая в shell script для отсылки сообщений демону syslogd.
Информация, полученная от программ, фильтруется демоном syslogd в соответствии с описанными фильтрами в конфигурационном файле /etc/syslog.conf.
Отфильтрованные сообщения могут отправляться в файл, на экран терминала и по сети на другой сервер, где также должен работать демон syslogd.
Важно помнить, что не все системные программы используют его в своей работе. Например, веб-сервер apache и прокси-сервер squid, а также samba используют собственную систему журналирования.
Какую информацию и когда передавать системе журнальной регистрации, определяет разработчик программы. Системный инженер может из всего потока информационных сообщений выбрать только то, что его интересует и поместить это в журнальные файлы с помощью syslogd. При написании функций посылки сообщения в систему журнальной регистрации программист должен указать два параметра:
- средство (facility);
- уровень важности сообщения (priority).
Эти параметры определяют использование только специально зарезервированных слов. Ниже представлены наиболее важные из них:
- auth: сообщения, связанные с аутентификацией. Возможно использование authpriv вместо указанного;
- authpriv: сообщения, содержащие конфиденциальную информацию и сообщения, связанные с аутентификацией;
- cron: сообщения программам cron и at;
- daemon: сообщения различных служб;
- kern: сообщения ядра;
- lpr: сообщения подсистемы печати;
- mail: сообщения постовой системы;
- mark: внутреннее средство системы syslogd, предназначенное для генерации временных меток. Не используется в программах;
- news: сообщения сервера новостей;
- syslogd: внутренние сообщения системы syslogd;
- user: сообщения, создаваемые пользовательскими программами;
- uucp: сообщения системы uucp;
- localo …local: набор дополнительных средств для использования программами, не подпадающими под стандартные средства.
При посылке сообщений в систему журнальной регистрации и при описании фильтров можно использовать уровни важности. Ниже перечислены наиболее важные из них:
- debug: отладочная информация или набор вспомогательных сообщений;
- info: информационные сообщения;
- notice: сообщения, требующие внимания;
- warning: предупреждающие сообщения;
- err: ошибки, препятствующие нормальной работе;
- crit: критические ошибки. Как правило, более серьезные, чем err;
- alert: события, требующие срочного реагирования;
- emerg: ошибки, останавливающие работу системы;
- none: применяется при задании исключений в фильтрах.
В современных версиях системы syslogd, для совместимости с предыдущими, оставлены такие уровни важности, как warn (аналог warning), error (аналог err) и panic (аналог emerg).
Демон syslogd имеет свой конфигурационный файл /etc/syslog.conf , в котором описываются фильтры, выбирающие из всего потока информации нужную и место ее назначения. В общем случае, формат файла syslog.conf имеет вид:
фильтр «табуляция» действие |
Под «фильтр» понимается алгоритм отбора сообщений, под «действие» – система действий в отношении отобранной информации. Поля в обязательном порядке должны быть разделены одним или двумя символами табуляции.
В поле «действие» можно указывать:
- путь к файлу;
- именованные каналы;
- терминалы и консоли;
- удаленные машины;
- списки пользователей;
- символ «*».
Путь к файлу
Если в поле «действие» необходимо указать, что получаемая информация должна добавляться в конец файла журнала, то путь к этому файлу указывается полностью, например /var/log/file/
Отдельные версии syslogd допускают использование следующей записи: -/var/log/file (дефис перед записью).
Если информация передается демону syslogd сразу, без предварительной буферизации, то она немедленно сохраняется в файлах на жестком диске. Это улучшает шансы спасти данные в случае серьезного сбоя в работе системы. Но в случае большого объема такой информации появляется другая угроза – слишком большое потребление ресурсов сервера при записи на диск без предварительной буферизации. Если перед именем файла использовать символ ‘-‘ , то он укажет демону syslogd на то, что не надо немедленно сбрасывать информацию на диск и можно использовать стандартную буферизацию файловых систем. При сбое системы в этом случае часть информации будет утеряна, но сохранится приемлемая скорость работы сервера в силу меньшего потребления ресурсов.
Именованные каналы
Использование именованных каналов применяется крайне редко и, как правило, в режимах отладки. Первоначально с помощью mkfifo создается файл именованного канала, затем в поле «действие» файла /etc/syslog.conf можно применять следующую запись:
| /путь_к_файлу/. |
Терминалы и консоли
При необходимости получения информации на экран терминала, в поле «действие» следует указать файл устройства, соответствующий выбранному терминалу или консоли, например: /dev/tty9.
Удаленные машины
При использовании этой возможности в поле «действие» нужно написать одну из следующих строк: @2.3.4.5 или
@log.my.org |
при этом информация, отобранная фильтром, будет по указанному после знака @ адресу. На удаленной машине также должен работать демон syslogd, причем он должен быть запущен с опцией «-r» для приема сообщений на 514 порту (см. файл /etc/services).
Список пользователей
Критические сообщения должны выводиться в окно терминала пользователя root. При необходимости вывода таких сообщений на окна терминалов, за которыми работают другие пользователи, необходимо в поле «действие» перечислить через запятую список этих пользователей.
Символ «*»
Если этот символ указан в поле «действие», то сообщения, отобранные фильтром, будут выводиться на терминалы всех пользователей, работающих в данный момент в системе.
Поле «фильтр» конфигурационного файла /etc/syslog.conf описывает фильтры, выбирающие из всего потока информации только определенную ее часть. В фильтре в качестве условия отбора информации можно указывать только средство и уровень важности. При этом информация, поступающая демону syslogd, проверяется всеми фильтрами, указанными в конфигурационном файле. Это означает, что одна и та же информация может попадать в различные журнальные файлы. Ниже приведены некоторые примеры использования фильтров.
- mail.debug сообщения средства mail с уровнем важности debug и выше.
- mail.!emerg сообщения средства mail с уровнем важности меньшим, чем emerg.
- mail,news.=notice сообщения средства mail и news с уровнем важности notice.
- *.notice;mail.none сообщения всех средств с уровнем notice и выше, за исключением средства mail.
В одной строке можно указывать несколько фильтров, разделенных символом «;».
Ниже приведено несколько реальных примеров описания фильтров из /etc/syslog.conf.
*info;mail.none;authpriv.none;cron.none;auth.none |
сообщения всех средств, с уровнем важности info, за исключением сообщений средств mail, authpriv, cron и auth будут добавляться в конец файла /var/log/messages.
auth.*;authpriv.* /var/log/secure |
сообщения средств auth и authpriv любого уровня важности будут добавляться в конец файла /var/log/secure.
Тонкости в работе syslogd
Нужно учитывать, что в своей работе syslogd очень щепетильно относится к обработке файлов регистрации. Если имело место ручное редактирование файлов или они были удалены и созданы вновь, то демон syslogd не будет с ними работать, и информация будет теряться. Если файлы были изменены, то демону нужно послать сигнал HUP:
killall -1 syslogd |
или другим путем:
kill -1 `cat /var/run/syslogd.pid` |
При изменении конфигурационного файла /etc/syslog.conf демону тоже нужно посылать сигнал HUP.
Все файлы, определенные в конфигурационном файле, syslogd создает сам. Если нужно обнулить содержимое журнального файла, то это можно сделать следующим образом:
echo –n > file |
при этом демону сигнал HUP посылать не нужно, он будет продолжать с ним работать.
К еще одной особенности демона можно отнести преобразование ip-адресов машин в их имена, причем демон в этом случае не использует систему DNS. Для использования имен вместо ip-адресов в файлах регистрации, нужно задать их соответствие в файле /etc/hosts.
Программа logrotate
Утилита logrotate была разработана для реализации различных схем управления журнальными файлами и для решения вопроса ограничения размера этих файлов. Изначально она являлась частью таких дистрибутивов, как RedHat и Debian, а впоследствии получила распространение и на другие дистрибутивы.
Ротация журнальных файлов происходит по определенным условиям:
- один раз в день;
- один раз в неделю;
- один раз в месяц;
- при превышении файлом заданного размера.
С помощью программы logrotate можно выполнять следующие действия:
- сохранять журнальные файлы в нескольких экземплярах;
- отсылать по почте файл, подвергнутый ротации. Если файлов несколько, то отсылается тот, который будет удален в процессе ротации;
- запускать на исполнение программы до или после выполнения процесса ротации.
Конфигурационный файл программы logrotate находится в /etc/logrotate.conf. Здесь описываются опции по умолчанию и файлы, которые будут подвергаться ротации.
Некоторые наиболее важные параметры, используемые в конфигурационном файле:
- compress: если указан, то после ротации файлы сжимаются gzip;
- create[mode, owner, group]: если указан, то после ротации будет создан файл с указанными параметрами;
- include (файл или каталог): включает содержимое указанного файла в основной конфигурационный файл;
- mail [address]: определяет почтовый адрес посылки файла после его ротации;
- mailfirst: отсылает по почте первую копию ротированного файла;
- maillast: отсылает по почте последнюю копию ротированного файла;
- missingok: при отсутствии файла перейти к следующему и не выдавать сообщений об ошибке;
- postrotate и endscript: определяют программы, выполняющиеся после ротации;
- prerotate и andscript: определяет программы, выполняющиеся перед ротацией;
- weekly : ротация происходит один раз в неделю;
- size размер: как только размер файла превысит указанный, произойдет и ротация;
- daily: ротация файла будет происходить один раз в неделю;
- monthly: ротация файла будет происходить один раз в месяц.
Пример конфигурационного файла logrotate.conf сразу после установки системы Ubuntu Linux 8.04 LTS:
# see "man logrotate" for details |
В третьей строке задается период ротации файлов один раз в неделю. Этот параметр можно переопределить при описании ротации какого-нибудь конкретного файла. В строке 5 (rotate 4) указывается, что по умолчанию будет сохранено четыре копии файла. В строке 7 (create) говорится, что программа logrotate будет создавать файлы самостоятельно. В строке 11 (include /etc/logrotate.d) подключаются все файлы из каталога /etc/logrotate.d, если они там есть. В 13 строке определяется ротация файла wtmp – один раз в месяц, файл будет создаваться с правами 0664 и принадлежать root и группе utmp. Храниться будет только одна копия файла.
Программа logrotate выполнена не в виде демона, и ее необходимо запускать каждый раз, когда необходима ротация. Добиться этого можно с помощью систем cron или anacron. После установки программы logrotate, в каталог /etc/cron.daily помещается скрипт, который запускает программу ротации. Эта программа по умолчанию будет запускаться один раз в день.
Выводы
В статье детально рассмотрены программы syslogd и logrotate. Пошагово описаны и расшифрованы опции, параметры конфигурационных файлов, применение и реальные примеры. Изложены некоторые тонкости функционирования программы syslogd.
Об авторе
Занимал должности от инженера 1 категории до начальника отдела IT. В настоящий момент работает ведущим консультантом-экспертом отдела инженерного и технического сопровождения Администрации Краснодарского края.