进一步阅读

进一步阅读

我有一个由服务管​​理的简单 Python 片段systemd,该服务记录到rsysogd守护进程,在该守护进程中我定义了一个配置文件,以将其以我定义的格式放入系统日志服务器。到目前为止,这工作正常。

在下面的代码中,我将参数作为我想要登录到服务器的字符串传递。我使用下面的代码作为模块并单独使用它进行日志记录,实际的脚本使用它来进行日志记录。

#!/usr/bin/env python

import syslog
import sys

syslog.openlog(facility=syslog.LOG_LOCAL0)
syslog.syslog(syslog.LOG_INFO, sys.argv[1])

由于应用程序是由systemd它管理的,所以当从 和 中看到时,它会生成可用的系统日志副本,journalctl -xejournalctl -u <my-service>我不希望发生这种情况,因为我在日志日志中记录了其他关键信息。

服务定义是

[Unit]
Description=Computes device foobar availability status

[Service]
Type=simple

EnvironmentFile=/etc/sysconfig/db_EndPoint
ExecStart=/usr/bin/python /opt/foobar/foobar.py
WatchdogSec=60
RestartSec=10
Restart=always
LimitNOFILE=4096

[Install]
WantedBy=default.target

并在/etc/systemd/journald.conf文件中,我还没有启用任何可用的选项。我查了一下这个日志配置文件使用文档ForwardToSyslog=no并重新启动journald服务

systemctl restart systemd-journald

并且还重新启动了我的服务单元,但我看到日志输出到系统日志服务器也到日志日志。我在这里缺少什么选项?

答案1

我有一个由 systemd 服务管理的简单 Python 片段,该服务记录到 rsys[l]ogd 守护进程 [...]

不,你还没有。

您拥有的是记录到 systemd 日志的服务。侦听您的 Python 程序正在与之通信的众所周知的/dev/log套接字的服务器不是rsyslogd。这是systemd-journaldrsyslogd附着在另一侧systemd-journald,而你的 Python 程序并没有与它对话。

由此看来,显而易见的是,不通过以下方式发送东西的唯一方法systemd-journald是使用一些其他路线到rsyslogd,不是Python 库默认使用的众所周知的套接字。这一切都取决于您的配置方式rsyslogd

  • 您可能已使用以下命令打开了 UDP 服务器imudp模块打开了 UDP 服务器,在这种情况下,您可以通过使用与此类 UDP 服务器通信的不同 Python 库来告诉您的 Python 程序使用该模块。 (Python syslog 库被硬连线以使用众所周知的本地套接字。)
  • 或者(更好的是,考虑到您必须小心不要向机器之外的世界开放 UDP 服务)您可以通过在模块的配置中进行配置来提供rsyslogd第二个不为人所知的AF_LOCAL套接字来侦听。imuxsock同样,您必须告诉您的 Python 程序使用它并使用不同的 Python 库。

您在 Python 程序中具体执行的操作超出了本答案的范围。

进一步阅读

相关内容