iRWX.RU

Personal IT notes.

Linux: Оповещение через SMTP в Rsyslog

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

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *