1

我正在尝试将内核日志 (/var/log/messages) 导出到远程 Syslog 服务器。到目前为止,大部分系统日志目前都存储在 journald 中,并且 rsyslogd 被禁用。

所以,我打算使用 rsyslogd 来导出日志(通过配置 rsyslog.conf 文件)。首先,我会将这些内核日志从 journald 传递到 rsyslogd,然后将它们导出。

有人可以建议这是否是正确的前进道路,或者我可以直接使用日记来实现同样的目标吗?

4

1 回答 1

0

Systemd 可以收集和存储日志,但它没有内置的方法来记录到远程位置,例如日志管理系统。相反,它依靠设备的 syslog 服务在 journald 和远程 syslog 服务器之间中继消息。

但是,syslog 是基于文本的,并且 journald 使用二进制格式,因此您的日志需要在传输之前进行转换。您可以使用 systemd 的 ForwardToSyslog 配置设置或使用 rsyslog 的 imjournal 模块来完成此操作。

/etc/systemd/journald.conf有一个ForwardToSyslog=yes选项允许您将日志转发到 syslog,这对我来说似乎是一种非常不雅的方式。


在 rsyslog 中,您可以添加模块imjournal,以获取日志日志。要使用它,请将以下内容添加到您的/etc/rsyslog.conf文件中。mmjsonparse 模块让 ryslog 解析日志消息:

module(load="imjournal")
module(load="mmjsonparse")

可以使用标准imklog模块记录内核消息。只需添加:module(load="imklog")到配置文件/etc/rsyslog.conf。使用标准 rsyslog 配置,这应该将内核消息记录到/var/log/messages/var/log/syslog

转发可以通过UDP 或 TCP完成。

转发:

*.* action(type="omfwd" target="10.0.2.1" port="514" protocol="udp")         # UDP
*.* action(type="omfwd" target="10.0.2.1" port="10514" protocol="tcp")       # TCP

过时的传统格式

*.* @10.0.1.1:514        # UDP
*.* @@10.0.1.1:514       # TCP

添加后(请不要使用旧格式),您的 rsyslog 客户端应该开始将消息转发到您的远程 syslog 服务器。我只在答案中添加了旧格式,因为如果你会发现很多这样写的配置。

于 2021-12-22T10:18:44.580 回答