【问题标题】:Rsyslog omprog pass message to scriptsRsyslog omprog 将消息传递给脚本
【发布时间】:2021-02-13 10:05:57
【问题描述】:

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

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

我尝试搜索official doc

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

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

你能帮忙吗?非常感谢!

【问题讨论】:

    标签: rsyslog clsidfromprogid


    【解决方案1】:

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

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

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

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

    ^program;template
    

    这将为每条消息运行一次program,并将其作为参数传递给模板的输出。这是not recommended

    【讨论】:

    • 明白。非常感谢。
    【解决方案2】:

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

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

    perl whit omprog 中的示例

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

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

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

    【讨论】:

    • 英雄让世界更美好...❤
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-12
    • 1970-01-01
    • 2018-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-12
    相关资源
    最近更新 更多