我应该如何将 systemd 日志发送到专用日志服务器

Jam*_*wey 12 logs rsyslog syslog systemd

过去,我使用 syslog-ng 或 rsyslog 将系统日志发送到网络上其他地方的专用日志服务器。然而,对于 systemd,诸如之前存储在 /var/log/secure 或 /var/log/auth.log (取决于您的发行版)中的 sudo 命令之类的东西。

我知道 /etc/systemd/journald.conf 有一个ForwardToSyslog=yes选项可以让我回到我的旧方式,但这似乎是一种不雅的倒退。systemd 是否具有将日志发送到中央日志服务器(如 Logrhythm、ELK 或类似服务器)的内置方法,或设置ForwardToSyslog=yes正确的方法来执行此操作?

Jam*_*wey 9

systemd 似乎没有将消息转发到系统日志服务器的内置方法。Red Hat 的官方建议是使用该imjournal模块允许 rsyslog 读取 journald 日志并将这些日志转发到中央日志服务器,方法是在 /etc/rsyslog.conf 中设置以下内容:

module(load="imjournal"
    PersistStateInterval="number_of_messages"
    StateFile="path"
    ratelimit.interval="seconds"
    ratelimit.burst="burst_number"
    IgnorePreviousMessages="off/on")
Run Code Online (Sandbox Code Playgroud)

它们提供了这些选项的使用详细信息,并指出

  • 使用number_of_messages,您可以指定必须保存日志数据的频率。每次达到指定数量的消息时都会发生这种情况。

  • 用状态文件的路径替换路径。此文件跟踪最后一个处理的日记帐分录。

  • 使用seconds,您可以设置速率限制间隔的长度。在此时间间隔内处理的消息数不能超过burst_number 中指定的值。默认设置为每 600 秒 20,000 条消息。Rsyslog 丢弃指定时间范围内最大突发之后的消息。

  • 使用IgnorePreviousMessages,您可以忽略当前在日志中的消息并仅导入新消息,这在未指定状态文件时使用。默认设置为关闭。请注意,如果此设置关闭且没有状态文件,则日志中的所有消息都会被处理,即使它们已经在之前的 rsyslog 会话中处理过。

  • 好吧,似乎 systemd 项目在某些 [容量](https://github.com/systemd/systemd-netlogd) 中包含一个日志转发器。 (2认同)