使用 systemd Arch Linux 接收系统日志消息

Bru*_*ger 27 syslog systemd systemd-journald

我觉得我忽略了显而易见的事情,但我不知道如何让我的 Arch Linux 服务器使用systemdsyslog从远程系统接收和记录消息。

我有一个 Cisco 678 DSL 调制解调器和一个 DD-WRT WAP,两者都可以配置为将 syslog 格式的消息发送到其他机器。我希望那台机器成为我的 Arch Linux 服务器。

我四处搜索,我发现的只是“systemd 替换了 syslog”,或者我不再需要运行syslog或与我的问题同样无关的东西。

更新

我在Arch 论坛上问过,但没有得到相关的答案。我安装了 syslog-ng 只是为了侦听 UDP 端口 514。syslog-ng 从我的 Cisco 678 和我有的 DD-WRT WAP 写入消息。不幸的是,这些消息并没有出现在 systemd 的日志中,而是出现在平面文件中。因此,没有确切的解决方案,而是一种解决方法。我宁愿将系统日志消息放在日志中,而不是平面文件中。

sta*_*fry 11

您可以使用socat轻松编写穷人的系统日志服务器。您只需要一个这样的服务单元:

[Service]
Restart=on-success
ExecStart=/usr/bin/socat -u UDP-RECV:514 STDOUT
Run Code Online (Sandbox Code Playgroud)

它会盲目地将 syslog 服务端口上接收到的任何内容发送到 systemd 日志。将上面的另存为,说,/etc/systemd/system/syslog.service然后

# systemctl daemon-reload
# systemctl start syslog
Run Code Online (Sandbox Code Playgroud)

然后,您只需要源将消息发送到侦听服务器上的 UDP 端口 514。

您可能希望增强它以实际解析接收到的数据并对其进行格式化,但如果您只想记录接收到的内容,则没有必要。

socat是在Arch Linux的额外资料库:pacman -S socat

  • 好答案。因为我无法安装 socat,所以我使用了一个快速的 python 脚本:`import socket; 袜子 = socket.socket(type=socket.SocketKind.SOCK_DGRAM); 袜子绑定((“0.0.0.0”,514));而真:打印(sock.recv(1024 * 1024))` (4认同)

Bri*_*ard 2

所以这里有一点差距。

Systemd 确实支持通过 systemd-journal-gateway 组件进行远程消息传递。也就是说,这些消息不是系统日志格式。Syslog(作为一种格式)是 RFC 5424 中记录的 IETF 批准的规范(已弃用以前的版本 RFC 3164)。

这里记录了使这些功能完美结合的更多复杂性:

http://www.freedesktop.org/wiki/Software/systemd/syslog/

和这里(man systemd-journald.service)

   systemd-journald is a system service that collects and stores logging data.
   It creates and maintains structured, indexed journals based on logging
   information that is received from the kernel, from user processes via the
   libc syslog(3) call, from STDOUT/STDERR of system services or via its native
   API. It will implicitly collect numerous meta data fields for each log
   messages in a secure and unfakeable way. See systemd.journal-fields(7) for
   more information about the collected meta data.
Run Code Online (Sandbox Code Playgroud)

总之,确保消息从 syslog-ng 发送到 STDOUT,并且内容应该最终记录在日志中。

在进一步跟进这一点时,我也发现了这一点:

https://github.com/intgr/pg_journal/blob/master/doc/pg_journal.md

有人正在编写从 PostgreSQL 到 systemd 的绑定以进行日志记录。他们在本文中指出,目前(截至该文件发布时间,2013/06)systemd 不支持多行消息,因此也要注意这一点。