Фильтры в rsyslog


slash - Posted on 14 Май 2009

В Debian Lenny заменили системный демон логирования syslog на более продвинутый rsyslog. Одно из его преимуществ, называемое фильтрацией, мне понравилось особенно сильно. Давайте рассмотрим его на примере:
Мне нужно было разделить по разным файлам почтовые логи сервера smtp (postfix) от логов pop3/imap сервера dovecot.

Сначала посмотрим в лог, чтобы определить как отличаются логи сервиса dovecot от остальных:

May 14 20:50:03 host dovecot: IMAP(username): Disconnected: Logged out
May 14 20:51:48 host dovecot: auth(default): new auth connection: pid=9216

Оказывается, все они обязательно начинаются со слова 'dovecot:'. Хорошо, теперь откроем файл /etc/rsyslog.conf и найдём строки, отвечающие за почтовые сообщения:

#
# Logging for the mail system.  Split it up so that
# it is easy to write scripts to parse these files.
#
# закомментируем следующую строку...
#mail.=info     -/var/log/mail/mail.info
# и заменим её своей, которая делает то же самое что и закомментированная,
# но пропускает (не логирует) сообщения от dovecot:
if $syslogfacility-text == 'mail' and $syslogpriority-text == 'info' and \
    not ($syslogtag startswith 'dovecot:') then /var/log/mail/mail.info
 
# следующие две строки оставляем как есть, т.к. обычно давкот туда не пишет
mail.=warn      -/var/log/mail/mail.warn
mail.=err       /var/log/mail/mail.err
 
# снова закомментируем строку и заменим её на свою:
#mail.*     /var/log/mail/mail.all
if $syslogfacility-text == 'mail' and \
    not ($syslogtag startswith 'dovecot:') then /var/log/mail/mail.all

После этого просто добавим туда же полностью свои строки, которые будут отвечать за логирование давкотовских сообщений:

#
# Logging the dovecot's messages
#
# логирование всех-всех сообщений от dovecot в один файл...
:syslogtag, startswith, "dovecot:"              /var/log/mail/dovecot.all
# и в разные файлы с разделением по приоритетам:
if $syslogfacility-text == 'mail' and $syslogpriority-text == 'info' \
    and $syslogtag startswith 'dovecot:' then   /var/log/mail/dovecot.info
if $syslogfacility-text == 'mail' and $syslogpriority-text == 'err' \
    and $syslogtag startswith 'dovecot:' then   /var/log/mail/dovecot.err
if $syslogfacility-text == 'mail' and $syslogpriority-text == 'warn' \
    and $syslogtag startswith 'dovecot:' then   /var/log/mail/dovecot.warn

Вот и всё, перезагружаем правила командой:

$ /etc/init.d/rsyslog reload

, смотрим на всякий случай в файл /var/log/syslog (по умолчанию в debian lenny туда попадают сообщения об ошибках от самого rsyslog) и радуемся :)

Более подробно об этой и других новомодных фишках этого логера можно прочитать (на английском) здесь: Filter Conditions, а начать полное изучение всех его возможностей можно отсюда: RSyslog - Documentation.

4.5
Ваша оценка: Ничего Рейтинг: 4.5 (2 голоса)

Спасибо за пояснения, как раз нужно было по 2-м событиям фильтровать

syslog-ng тоже имеет подобную возможность....

Спасибо, не знал :)

Отправить комментарий

Google Friend Connect (leave a quick comment)
loading...
Содержание этого поля является приватным и не предназначено к показу.