【问题标题】:rsyslog dynamic filename log rotationrsyslog 动态文件名日志轮换
【发布时间】:2013-09-30 10:37:29
【问题描述】:

所有主机都将所有日志发送到 RSyslog 服务器(版本 5.8.10)。

RSyslog 使用以下模板保存日志文件 -

$template RemoteHost,"/var/log/x/host/%$YEAR%-%$MONTH%-%$DAY%/%HOSTNAME%/%APP-NAME%.log"

因此来自 host11 的 windows 事件日志将被记录到 - /var/log/x/host/2013-09-24/host11/EvntSLog.log

我现在想设置 logrotate,以便将一整天的日志文件压缩并发送到“/nfs/archive/”。因此,归档时的上述日志文件应如下所示 - /nfs/archive/2013-09-24.tgz。请注意,我不是在压缩单个日志文件,而是在压缩整个目录。

如何使用 logrotate/cron 来实现这一点?

【问题讨论】:

    标签: archive rsyslog logrotate log-rotation


    【解决方案1】:

    现在,我决定使用一个 python 脚本来执行此操作,该脚本将所有内容压缩并将其复制到 nfs 分区。如果有人设法使用 logrotate 实现了这一点,请回复此线程。

    【讨论】:

      【解决方案2】:

      我想你知道 logrotate/cron 是如何工作的。

      您可以使用olddir将目录设置在同一个物理磁盘上,并使用postrotateolddir的所有内容移动到不同分区的目录中。

      olddir /var/log/x/host/host11/
      
      postrotate
          mv /var/log/x/host/host11/* /nfs/archive/
      endscript
      

      或者(如果您不想使用任何 postrotate 变通办法)您可以使用符号链接:

      sudo ln -s /var/log/x/host/host11 /nfs/archive
      

      注意:

      请谨慎使用通配符。如果指定 *,logrotate 将 旋转所有文件,包括以前旋转的文件。解决这个问题的方法 是使用 olddir 指令或更精确的通配符(例如 *.log)。

      我建议您不要使用日期作为文件/目录名称(引用您的模板)。您可以在 logrotate 中设置它。这样您就不必使用任何(在您的情况下是多个)通配符。

      【讨论】:

        猜你喜欢
        • 2022-07-13
        • 1970-01-01
        • 1970-01-01
        • 2015-01-16
        • 1970-01-01
        • 2011-07-10
        • 1970-01-01
        • 2020-07-17
        • 1970-01-01
        相关资源
        最近更新 更多