如何配置 logrotate 来复制/SSH apache 日志文件

如何配置 logrotate 来复制/SSH apache 日志文件

我正在开发一个 apache 日志分析器,它需要将 apache 日志文件导入到目录中进行处理。我无法简单地将其指向 apache 日志目录,因为它会在删除每个文件之前将其导入。它也没有重复记录的概念,所以我无法设置 cron 来复制/var/log/apache2/*到文件夹中。

我认为 logrotate 是执行此操作的最佳位置,但我不知道从哪里开始配置它。所以我的问题是:

如何配置 logrotate 以自动将 Apache 日志文件通过 SSH 传输到远程主机?

另一种方法是本地复制并通过 cron 运行scp& rm,但一步 SSH 过程就更好了。

答案1

查看prerotatepostrotate配置选项(示例见man logrotate)。例如,您可以有一个 prerotate 来 scps 文件(确保您正确配置了 SSH 密钥;您的 root 用户应该能够通过 ssh 连接到目标系统而无需密码)。这将复制 access.log 文件旋转(重命名、压缩等)它。

请注意,在这种情况下,您将丢失在复制文件和旋转步骤之间发生的任何访问,因此您也可以将其放在 postrotate 部分,但复制 access.log.1。

在 /etc/logrotate/apache2 中(这可能不同,我只能访问 Debian 系统),您可以添加 prerotate 部分,以便文件的内容如下所示:

/var/log/apache2/*.log {
    weekly
    missingok
    rotate 52
    compress
    delaycompress
    notifempty
    create 640 root adm
    sharedscripts
    postrotate
        /etc/init.d/apache2 reload > /dev/null
    endscript
    prerotate
        scp /var/log/apache2/access.log [email protected]
    endscript
}

相关内容