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

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

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

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

答案1

看来 systemd 确实不是具有将消息转发到系统日志服务器的内置方法。红帽官方推荐是使用该imjournal模块允许 rsyslog 读取日志日志并将这些日志转发到中央日志服务器,方法是在 /etc/rsyslog.conf 中设置以下内容:

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

他们提供了这些选项的使用细节,并指出

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

  • 代替小路以及状态文件的路径。该文件跟踪最后处理的日记条目。

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

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

答案2

我之前没有仔细阅读过imjournald,但是在阅读了James Shewey的回答之后,我认为这真的很简单。

使用规则集,您可以实现您想要的一切。

module(load="imjournal"
    PersistStateInterval="number_of_messages"
    StateFile="path"
    ratelimit.interval="seconds"
    ratelimit.burst="burst_number"
    IgnorePreviousMessages="off/on"
    ruleset="journald"  #bind this action to the ruleset "journald"
    )

#declare ruleset "journald"

ruleset(
 name="journald"              
 queue.type="FixedArray"       
 queue.spoolDirectory="/var/run/rsyslog/queues" 
 queue.filename="stats_ruleset"
 queue.lowwatermark="20000"     
 queue.maxdiskspace="100m"        
 queue.size="5000000"             
 queue.dequeuebatchsize="1000"  
 queue.saveonshutdown="on"      
) {

# add here actions you want to perform

action(
  name="impstats_to_es"
  type="omelasticsearch"
  server="127.0.0.1"
  serverport="9200"
  template="stats"
  searchIndex="impstats"
  searchType="impstats"
  bulkmode="on"
  action.resumeretrycount="-1"
)

}

相关内容