1

所有主机都将所有日志发送到 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 来实现这一点?

4

2 回答 2

0

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

于 2014-04-14T19:13:11.990 回答
0

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

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

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-01-25T13:42:24.150 回答