admin.txt

… заметки IT’шника…

Email нотификация RSyslog с фильтрацией сообщений для разных получателей.

rsyslog-mailДанный пост продолжает тему использования  Email нотификаций (через SMTP) о событиях полученных демоном RSyslog. Однозначно и с уверенностю могу сказать, что сидеть в веб-интерфейсе (phpLogCon) и постоянно просматривать текущие события — дело нудное и бесполезное. Если вы хотите получить реальную пользу от внедрения RSyslog, то нужно делать почовую нотификацию на заинтересованных лиц (админов конретных сервисов/серверов).

В прошлом посте я писал об основах конфигурирования модуля для отправки почты. Сейчас, уже поработав  некоторое время с данной системой, могу выложить мой текущий конфиг. В этом конфиге я отсылаю разные сообщения на разные ящики и могу отсеивать не нужные нотификации. Фильтрация сообщений основана на Facility.Serverity классификации, плюс фильтрация на основе вхождения в текст сообщения определенного текста. Первая часть конфига — общая, служит для отправки уведомлений на сообщения с уровнем важности (serverity) начиная от err (ошибка), в не зависимости от источника (facility) события. Вторая часть — нотификация сетевого админа о событиях на коммутационном оборудовании, которое шлет сообщения с facility=local7. Дополнительно, на нотификации от коммутаторов уровень важности включает еще и предупреждения. Одинаково в обоих случаях реализована фильтрация сообщений, используя конструкцию:

if not ($msg contains 'Кусок текста по которому фильтуем').........
Ну и сам формат файла я приспособил к построчному коментированию и расширению. Дело в том, что условие выборки и отправки нотификации должно быть одной строкой (для парсера rsyslog’а), поэтому разбив эту строку на отдельные условия, я завершил каждую не последнюю сроку обратным слешем («\«), маскирующим последующий символ конца строки. В итоге теперь легко комменить строки и расширять/изменять конфиг.

После внесения изменений в конфиг необходимо перезапустить демона, коммандой:

/etc/init.d/rsyslog restart

А потом желательно убедиться, что в конфиге не обнаружено ошиок и демон запустился. Я для этого смотрел последние события на вебинтерфейсе, где появлялось сообщение о перезагрузке сервера (в моем случае rsyslog обрабатывает и события локальной системы).

Пример моего конфигурационного файла notify.cong (подключаемого в основной конфиг из папки /etc/rsyslog.d/):

$ModLoad ommail
##################part-1########################################
$ActionMailSMTPServer mail-serv
$ActionMailSMTPPort 25
$ActionMailFrom rsyslog@myfirm.com
$ActionMailTo it.logs@myfirm.com
$template mySubject1,"On host %hostname%, Error-level by serverity"
$template myBody1,"Facility.Serverity: %syslogfacility%.%syslogpriority% at %timegenerated% on host: %HOSTNAME%\r\n %msg%"
$ActionMailSubject mySubject1
#seconds interval for mailing
$ActionExecOnlyOnceEveryInterval 10
#expression based filter
if not ($msg contains 'TopLevelSystem'\
or $msg contains 'getConnectorInfo'\
or $msg contains 'failed - Data stale'\
or $msg contains 'DatadiscoveryfailedforConnector' )\
and ($syslogseverity-text =='err'\
or $syslogseverity-text =='crit'\
or $syslogseverity-text =='alert'\
or $syslogseverity-text =='emerg' )\
then :ommail:;myBody1
########################part-2#####################################
$ActionMailSMTPServer 192.168.1.16
$ActionMailSMTPPort 25
$ActionMailFrom rsyslog-local7@myfirm.com
$ActionMailTo net.admin@myfirm.com
$template mySubject2, "On switch %hostname%, local7 facility event"
$template myBody2,"Facility.Serverity: %syslogfacility%.%syslogpriority% at %timegenerated% on host: %HOSTNAME%\r\n %msg%"
$ActionMailSubject mySubject2
#seconds interval for mailing
$ActionExecOnlyOnceEveryInterval 10
if not ($msg contains 'is now online'\
or $msg contains 'is now off-line'\
or $msg contains 'collision or drop rate'\
or $msg contains 'is Blocked by STP' )\
and ($syslogfacility-text =='local7')\
and ($syslogseverity-text =='warning'\
or $syslogseverity-text =='err'\
or $syslogseverity-text =='crit'\
or $syslogseverity-text =='alert'\
or $syslogseverity-text =='emerg')\
then :ommail:;myBody2

PS
Если кто заметил неточности или у когото появились вопросы — велком, всегда раз помочь.

Реклама

Май 14, 2009 - Posted by | Linux | ,

1 комментарий »

  1. Настраивал нотификацию по почте, проблема с приходящими сообщениями: приходят всегда только с LocalHost и никак иначе. Хотя сообщения 100% доходят и если добавить правило с фильтрацией в отдельный файл — всё хорошо работает.
    Т.е. получается в $msg никогда не попадает строка с отличная от localhost.
    Тестировал сообщениями: nc -w0 -u ipaddr <<< "aaaaaaaaaaaaaaaaaaa"
    Конфиг:
    =====================================================
    # Use traditional timestamp format
    $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
    $AllowedSender UDP, 192.168.0.21
    # provides UDP syslog reception
    $ModLoad imudp
    $UDPServerRun 514

    # Provides kernel logging support (previously done by rklogd)
    $ModLoad imklog
    # Provides support for local system logging (e.g. via logger command)
    $ModLoad imuxsock

    # Log all kernel messages to the console.
    # Logging much else clutters up the screen.
    #kern.* /dev/console

    # Log anything (except mail) of level info or higher.
    # Don't log private authentication messages!
    *.info;mail.none;authpriv.none;cron.none /var/log/messages

    # The authpriv file has restricted access.
    authpriv.* /var/log/secure

    # Log all the mail messages in one place.
    mail.* -/var/log/maillog

    # Log cron stuff
    cron.* /var/log/cron

    # Everybody gets emergency messages
    *.emerg *

    # Save news errors of level crit and higher in a special file.
    uucp,news.crit /var/log/spooler

    # Save boot messages also to boot.log
    local7.* /var/log/boot.log

    #$IncludeConfig /etc/rsyslog.d/*.conf

    $ModLoad ommail
    $ActionMailSMTPServer mail.company.ru
    $ActionMailFrom robot@company.ru
    $ActionMailTo user@company.ru
    $template mailSubject,"disk problem on %hostname%"
    $template mailBody,"RSYSLOG Alert\r\nmsg='%msg%'"
    $ActionMailSubject mailSubject
    # make sure we receive a mail only once in six
    # hours (21,600 seconds ;))
    $ActionExecOnlyOnceEveryInterval 1
    # the if … then … mailBody mus be on one line!
    if $msg contains 'a' then :ommail:;mailBody
    =====================================================
    Не могу найти где-то описание с похожей проблемой. Всё это ставиться на Centos. Версия rsyslog с сайта…

    комментарий от Слава | Ноябрь 23, 2012


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

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: