在我的系统中,我正在运行 rsyslog 守护程序。我尝试配置 syslog.conf,将所有身份验证邮件发送到特定文件,使用以下行
auth.*;authpriv.* /var/log/AuthLogs
它正在工作。现在我想将这些消息发送给一个进程。该进程将准备好捕获日志。以前我使用的是 syslogd 守护进程。在那里我能够使用下面的行发送日志
auth.*;authpriv.* |exec /usr/bin/read.exe
但 rsyslogd 却无法正常工作。有人知道如何操作吗?
更新:这个问题尤其发生在python脚本中,例如代码:
#!/usr/local/bin/python
import sys
import fcntl, os
message = sys.stdin.readline() # Read what's waiting, in one go
if not message:
print "nothing in message\n"
fd = open('/tmp/testrsyslogomoutput1.txt', 'a')
fd.write("Receiving log message : \n%s\n" % (message))
fd.close()
我想通过 rsyslog 调用这个 python 代码。
答案1
我查了一下谷歌,发现了这个回答。我检查了示例并发现,对于您的情况,您应该将字符串更改为:
auth.*;authpriv.* ^/usr/bin/read.exe
更新:我创建了仅包含的简单脚本echo $1 >> /var/log/tt.log
。此后,我在日志文件中看到了传递给该脚本的所有消息。
答案2
取决于您是否要为匹配消息的每个实例调用外部程序(在这种情况下,'^command'功能应该可以为您获取日志消息作为参数)。
如果你想将所有匹配的消息传递到长期运行程序的标准输入,那么我认为你需要 rsyslog 的“omprog”功能。请参阅http://www.rsyslog.com/doc/v8-stable/configuration/modules/omprog.html了解完整详情。示例配置(来自该页面)...
module(load="omprog")
action(type="omprog"
binary="/pathto/omprog.py --parm1=\"value 1\" --parm2=\"value2\""
template="RSYSLOG_TraditionalFileFormat")