从python脚本登录到rsyslog工具

问题描述 投票:7回答:1

我在/etc/rsyslog.conf中有这个:

local0.*     /var/log/local.log

而且我有一个简单的python脚本,它从标准输入中读取并应该发送给local0

#!/usr/bin/python3

import sys, syslog

syslog.openlog(ident="MY_SCRIPT", facility=syslog.LOG_LOCAL0)

for line in sys.stdin:
    syslog.syslog(syslog.LOG_WARNING, f"Message\n\n")

但是它不起作用。 rsyslog看不到该消息是local0

仅当我更改为*.*时,rsyslog才看到它:

*.*     /var/log/local.log

我假设我没有在我的python脚本中正确配置该工具。

如何指定我要登录到local0

python-3.x logging syslog rsyslog
1个回答
2
投票

Rsyslog和本地*:

[Rsyslog]具有设施local0local7,它们是syslog为用户提供的“自定义”未使用设施。如果开发人员创建了一个应用程序并希望将其记录到syslog,或者要将任何输出重定向到syslog(例如Apache日志),则可以选择将其发送到任何local#工具。然后,您可以使用/etc/syslog.conf(或/etc/rsyslog.conf)将发送到该local#的日志保存到文件中,或将其发送到远程服务器(source)。

Config:

/etc/rsyslog.conf

local0.*     /var/log/local.log

这是正确的,它将日志文件/var/log/local.log分配给登录到local0的应用程序。作为另一个示例,kern.=warn -/var/log/kernel/warnings.log可用于记录内核警告。

Python应用程序/脚本:

#!/usr/bin/python3
import sys, syslog

syslog.openlog(ident="MY_SCRIPT", facility=syslog.LOG_LOCAL0)

for line in sys.stdin:
    syslog.syslog(syslog.LOG_WARNING, f"Message {line}\n\n")

初始代码确实起作用,并且如注释中所指出,this可以用作替代,并且已按照@ apoorva-kamath的建议添加了{line}变量...

这里重要的一面是Python脚本和Rsyslog之间的通信

也正如命令所指出的,尝试重新加载rsyslog systemctl restart rsyslog;您也可以使用rsyslogd -N1检查Rsyslog配置,并使用以下方法检查rsyslog是否正常工作:

sudo cat /var/log/messages | grep rsyslog

取决于Python脚本运行的上下文,与Rsyslog的通信可能会失败,需要有关配置的更多详细信息,否则,您可以尝试(从脚本的上下文中进行:)

logger -p local0.error "TroubleshootingTest"

最后检查数据传输:

sudo netstat -taupn | grep syslog

文档:

有关Python syslogtroubleshooting RsyslogRsyslog facility的更多详细信息>

© www.soinside.com 2019 - 2024. All rights reserved.