Программная реализация системы журнальной регистрации в Linux: Конфигурирование syslogd

Тонкости в работе syslogd. Ротация журнальных файлов. Программа logrotate.

Александр Деревянко, ведущий консультант-эксперт, консультант
В сфере IT работает с 1990 года. Занимал должности от инженера 1 категории до начальника отдела IT. В настоящий момент работает ведущим консультантом-экспертом отдела инженерного и технического сопровождения Администрации Краснодарского края.

Описание: В статье показано, как в системах 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	

/var/log/messages

 

сообщения всех средств, с уровнем важности 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
# rotate log files weekly
weekly
# keep 4 weeks worth of backlogs
rotate 4
# create new (empty) log files after rotating old ones
create
# uncomment this if you want your log files compressed
#compress
# packages drop log rotation information into this directory
include /etc/logrotate.d
# no packages own wtmp, or btmp -- we'll rotate them here
/var/log/wtmp {
missingok
monthly
create 0664 root utmp
rotate 1
}

/var/log/btmp {
missingok
monthly
create 0664 root utmp
rotate 1
}

# system-specific logs may be configured here

 

В третьей строке задается период ротации файлов один раз в неделю. Этот параметр можно переопределить при описании ротации какого-нибудь конкретного файла. В строке 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.

 

Об авторе

В сфере IT работает с 1990 года.

Занимал должности от инженера 1 категории до начальника отдела IT. В настоящий момент работает ведущим консультантом-экспертом отдела инженерного и технического сопровождения Администрации Краснодарского края.

 

 

 

Добавить комментарий

Войти с помощью: