Rsyslog omprog 将消息传递给脚本
Rsyslog omprog pass message to scripts
准确地说,我想过滤日志并发送一些警告邮件。
首先,我尝试了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",而不是动态参数。
你能帮忙吗?非常感谢!
omprog 的预期用途是让您的程序读取 stdin,它会在那里找到完整的默认 RSYSLOG_FileFormat
模板数据(带有日期、主机、标签、消息)。这很有用,因为这意味着您可以编写程序,使其只启动一次,然后它可以循环处理所有到达的消息。
这减少了为每条消息重新启动程序的开销,并使其反应更快。但是,如果您愿意,您的程序可以在读取一行后退出,然后 rsyslog 将重新启动它以获取下一条消息。 (您可能想要实施 confirmMessages=on
)。
如果你只想要msg
部分作为数据,你可以在操作中使用template=...
来指定你自己的最小模板。
如果您确实必须将味精作为参数,您可以使用旧版过滤器语法:
^program;template
这将为每条消息 运行 program
一次,将其作为参数传递给模板的输出。这是not recommended.
如果 omprog 脚本没有执行或没有保存到文件,问题是:
- rsyslog 正在向该脚本发送完整消息,因此您需要定义或使用模板
- 你的脚本需要听 return
perl 中的 omprog 示例
#my $input = join( '-', @ARGV ); ///不工作我失去了 5 个小时的生命
我的 $input = ;现在这就是你需要的
希望这是 perl/python/rsyslog 社区所需要的。
准确地说,我想过滤日志并发送一些警告邮件。
首先,我尝试了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",而不是动态参数。
你能帮忙吗?非常感谢!
omprog 的预期用途是让您的程序读取 stdin,它会在那里找到完整的默认 RSYSLOG_FileFormat
模板数据(带有日期、主机、标签、消息)。这很有用,因为这意味着您可以编写程序,使其只启动一次,然后它可以循环处理所有到达的消息。
这减少了为每条消息重新启动程序的开销,并使其反应更快。但是,如果您愿意,您的程序可以在读取一行后退出,然后 rsyslog 将重新启动它以获取下一条消息。 (您可能想要实施 confirmMessages=on
)。
如果你只想要msg
部分作为数据,你可以在操作中使用template=...
来指定你自己的最小模板。
如果您确实必须将味精作为参数,您可以使用旧版过滤器语法:
^program;template
这将为每条消息 运行 program
一次,将其作为参数传递给模板的输出。这是not recommended.
如果 omprog 脚本没有执行或没有保存到文件,问题是:
- rsyslog 正在向该脚本发送完整消息,因此您需要定义或使用模板
- 你的脚本需要听 return
perl 中的 omprog 示例
#my $input = join( '-', @ARGV ); ///不工作我失去了 5 个小时的生命
我的 $input = ;现在这就是你需要的
希望这是 perl/python/rsyslog 社区所需要的。