【问题标题】:Exporting logs using journald / rsyslogd使用 journald / rsyslogd 导出日志
【发布时间】:2022-01-19 17:24:17
【问题描述】:

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

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

有人可以建议这是否是正确的路径,或者我可以直接使用 journald 来实现相同的目标吗?

【问题讨论】:

    标签: logging systemd rsyslog systemd-journald


    【解决方案1】:

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

    但是,syslog 是基于文本的,并且 journald 使用二进制格式, 所以您的日志需要在传输之前进行转换。你 可以通过使用 systemd 的 ForwardToSyslog 配置来做到这一点 设置,或者使用 rsyslog 的 imjournal 模块。

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


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

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

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

    可以通过UDP or 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 服务器。 我只在答案中添加了传统格式,因为如果你会发现很多这样写的配置。

    【讨论】:

    • 您好,感谢您的回复! ForwardToSyslog=yes 只会启用将日志从 journald 转发到 rsyslogd?但是,我的目标是将它们导出到远程服务器,所以我想我只需要使用“imklog”解决方案对吗?
    • @TanikaGarg 我已经更新了我的答案,希望这能回答你的问题。
    猜你喜欢
    • 2019-02-04
    • 2020-11-11
    • 1970-01-01
    • 2013-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-26
    相关资源
    最近更新 更多