1

准确地说,我想过滤日志并发送一些警告电子邮件。

首先,我尝试了 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")
}

我试图搜索官方文档

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

但在示例中,他们使用的是字符串“p1”,而不是动态参数。

你能帮忙吗?非常感谢!

4

2 回答 2

2

omprog 的预期用途是让您的程序读取标准输入,并在那里找到完整的默认RSYSLOG_FileFormat模板数据(带有日期、主机、标签、味精)。这很有用,因为这意味着您可以编写程序以便它只启动一次,然后它可以循环并处理所有到达的消息。

这减少了为每条消息重新启动程序的开销,并使其反应更快。但是,如果您愿意,您的程序可以在读取一行后退出,然后 rsyslog 将重新启动它以获取下一条消息。(您可能想要实施confirmMessages=on)。

如果您只想将msg部件作为数据,您可以template=...在操作中使用来指定您自己的最小模板。

如果您确实必须将 msg 作为参数,则可以使用旧的过滤器语法:

^program;template

这将为program每条消息运行一次,并将其作为参数传递给模板的输出。不建议这样做。

于 2020-04-09T07:34:38.277 回答
0

如果 omprog 脚本未执行或未保存到文件,则问题在于:

  1. rsyslog 正在向该脚本发送完整消息,因此您需要定义或使用模板
  2. 你的脚本需要监听并返回一个

perl whit omprog 中的示例

#my $input = join('-', @ARGV); ///不工作我失去了5个小时的生命

我的 $input = ; 现在这就是你需要的

希望这是 perl/python/rsyslog 社区所需要的。

于 2021-02-13T02:05:57.930 回答