Syslog сервер настроен. Теперь настроим оповещение администратора об определенных событиях посредством электронной почты.
Логика работы rsyslog при нашей постановке задачи следующая:
1) принятое syslog сообщение фильтруется по определенным критериям и в случае выполнения критериев фильтрации происходит действие;
2) под это действие формируется письмо из определенных шаблона тела и заголовка письма;
3) сформированное письмо отправляется на SMTP сервер.
По умолчанию rsyslog читает все файлы с расширением .conf, находящиеся в каталоге /etc/rsyslog.d/
— Создадим новый файл конфигурации:
sudo nano /etc/rsyslog.d/smtp.conf
— Включим модуль rsyslog для работы с SMTP:
module(load="ommail")
Настройка фильтрации
Пример №1
Необходимо искать в сообщениях тексты «storm-control» и «detected», в случае полного совпадения формировать тело и заголовок письма из шаблонов и отправлять это письмо на SMTP сервер.
# Если сообщение содержит "storm-control" и содержит "detected", то .. if $msg contains "storm-control" and $msg contains "detected" then { action( type="ommail" server="smtp.company.corp" port="25" mailfrom="syslog@company.ru" mailto="admin@company.ru" # Включаем тело письма, иначе будет приходить пустое письмо body.enable="on" # Имя шаблона письма template="mailBody" # Имя шаблона заголовка письма subject.template="mailSubject_storm_on" ) }
Пример №2
Необходимо искать в сообщениях тексты «storm-control» и «detected», в случае нахождения текста «storm-control» и отсутствия текста «storm-control» формировать тело и заголовок письма из шаблонов и отправлять это письмо на SMTP сервер.
if $msg contains "err-disable" and not $msg contains "storm-control" then { action( type="ommail" server="smtp.company.corp" port="25" mailfrom="syslog@company.ru" mailto="admin@company.ru" body.enable="on" template="mailBody" subject.template="mailSubject_err_disable" ) }
Подробнее про фильтрацию сообщений на основе выражений — тут, тут
Настройка шаблона письма
Для примера настроим шаблон сообщения для получения письма следующего вида:
Device: [отправитель сообщения] Facility: [источник].[важность] Time: [дата, время получения] Syslog MSG: ------------------------------------------------ [текст syslog сообщения]
Для написания подобного тела письма нам потребуется использовать шаблон типа «list».
Шаблон типа «list» строится из:
— статические значения — это статический текст;
— динамические значения — это значения из сообщения, с сервера, вычисления.
template ( # Имя шаблона используется в настройках действия name="mailBody" # Тип шаблона type="list" ) { # Статический текст "Device:[Табуляция][Табуляция]" constant(value="Device:\t\t") # Динамическое значение "отправитель сообщения" property(name="hostname") # Статический текст "(перевод коретки на новую строку, Enter)" constant(value="\n") constant(value="Facility:\t\t") # Динамическое значение "приоритет сообщения" # в виде "[источник].[важность]" property(name="pri-text") constant(value="\n") constant(value="Time:\t\t") # Динамическое значение "время получения сообщения" property(name="timereported" dateFormat="rfc3339" caseConversion="upper") constant(value="\n") constant(value="\n") constant(value="Syslog MSG:") constant(value="\n") constant(value="------------------------------------------------") constant(value="\n") # Динамическое значение "syslog сообщение" property(name="msg") constant(value="\n") }
Подробнее о шаблонах можно почитать в документации разработчика.
Настройка шаблона заголовка письма
Осталось настроить шаблоны заголовков для примеров №1 и №2. Будем использовать шаблон типа «string» (значение).
Для примера #1
template ( name="mailSubject_storm_on" type="string" # Статический тест "STORM DETECTED on" сочетается с динамическим значением %hostname% string="STORM DETECTED on %hostname%" )
Для примера #2
template ( name="mailSubject_err_disable" type="string" string="ERR_DISABLE detected on %hostname%" )
Не забываем перечитать настройки rsyslog:
sudo service rsyslog restart