我正在尝试将内核日志 (/var/log/messages) 导出到远程 Syslog 服务器。到目前为止,大部分系统日志目前都存储在 journald 中,并且 rsyslogd 被禁用。
所以,我打算使用 rsyslogd 来导出日志(通过配置 rsyslog.conf 文件)。首先,我会将这些内核日志从 journald 传递到 rsyslogd,然后将它们导出。
有人可以建议这是否是正确的前进道路,或者我可以直接使用日记来实现同样的目标吗?
我正在尝试将内核日志 (/var/log/messages) 导出到远程 Syslog 服务器。到目前为止,大部分系统日志目前都存储在 journald 中,并且 rsyslogd 被禁用。
所以,我打算使用 rsyslogd 来导出日志(通过配置 rsyslog.conf 文件)。首先,我会将这些内核日志从 journald 传递到 rsyslogd,然后将它们导出。
有人可以建议这是否是正确的前进道路,或者我可以直接使用日记来实现同样的目标吗?
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 服务器。我只在答案中添加了旧格式,因为如果你会发现很多这样写的配置。