Rsyslog omprog передать сообщение в сценарии - PullRequest
0 голосов
/ 09 апреля 2020

Точно, я хочу отфильтровать журналы и отправить несколько предупреждений по электронной почте.

Сначала я попытался ommail , но, к сожалению, этот модуль поддерживает только почтовый сервер, который не требует аутентификации, но мой почтовый сервер нуждается.

Поэтому я попытался использовать omprog , я написал скрипт python для входа на мой почтовый сервер, он получит один параметр - журнал и отправит его как почтовое тело. Тогда у меня возникла проблема, я не могу передать журнал в свой скрипт, если я попробую вот так, $ msg будет распознан как строка.

if $fromhost-ip == "x.x.x.x" then {
    action(type="omprog"
            binary="/usr/bin/python3 /home/elancao/Python/sendmail.py $msg")
}

Я попытался найти официальное объявление c.

module(load="omprog")
action(type="omprog"
   binary="/path/to/log.sh p1 p2 --param3=\"value 3\""
   template="RSYSLOG_TraditionalFileFormat")

но в примере они используют строку "p1", а не параметр Dynami c.

Не могли бы вы помочь? Большое спасибо!

1 Ответ

1 голос
/ 09 апреля 2020

Ожидаемое использование omprog для вашей программы для чтения стандартного ввода и там он найдет полные данные шаблона RSYSLOG_FileFormat по умолчанию (с датой, хостом, тегом, сообщением). Это полезно, так как это означает, что вы можете написать свою программу так, чтобы она запускалась только один раз, а затем она могла обрабатывать все сообщения по мере их поступления.

Это сокращает накладные расходы на перезапуск программы для каждого сообщения и ускоряет его реакцию. Однако, если вы предпочитаете, ваша программа может выйти после прочтения одной строки, а затем rsyslog перезапустит ее для следующего сообщения. (Возможно, вы захотите реализовать confirmMessages=on).

Если вы просто хотите, чтобы часть msg использовалась в качестве данных, вы можете использовать template=... в действии, чтобы указать свой собственный минимальный шаблон.

Если вы действительно должны использовать msg в качестве аргумента, вы можете использовать устаревший синтаксис фильтра:

^program;template

Это будет запускать program один раз для каждого сообщения, передавая его в качестве аргумента для вывода шаблона. не рекомендуется .

...