从 python 脚本登录到 rsyslog 工具

Posted

技术标签:

【中文标题】从 python 脚本登录到 rsyslog 工具【英文标题】:Log to rsyslog facility from a python script 【发布时间】:2020-09-18 13:21:52 【问题描述】:

我的/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

【问题讨论】:

你使用的是什么操作系统? @jdaz - 我正在使用 Debian。 在这里尝试@boatcoder 的答案:***.com/questions/3968669/… @400theCat 您的代码对我来说似乎运行良好。您是否在进行更改后重新启动了 rsyslog ? systemctl restart rsyslog 我也认为你错过了将实际命令行发送到日志文件syslog.syslog(syslog.LOG_WARNING, f"Message\n\n") 应该是syslog.syslog(syslog.LOG_WARNING, f"Message line\n\n") 【参考方案1】:

Rsyslog 和本地*:

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

配置:

/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")

初始代码确实有效,正如 cmets 中指出的那样,this 可以用作替代方案,并且按照@apoorva-kamath 的建议添加了line 变量...

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

正如命令 try 所指出的那样,重新加载 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 syslog、troubleshooting Rsyslog和Rsyslog facility的详细信息

【讨论】:

以上是关于从 python 脚本登录到 rsyslog 工具的主要内容,如果未能解决你的问题,请参考以下文章

rsyslog与 logrotate 服务以及日志切割方法小结 [Logrotatepythonshell脚本实现 ]

linux定时任务执行python脚本

rsyslog+mysql+loganalyzer

rsyslog

用5分钟学Python,做签到脚本,再也不怕断签啦!

效率工具SSH一键登录脚本(可一键从跳板机登录线上服务器)