我正在开发一个 apache 日志分析器,它需要将 apache 日志文件导入到一个目录中进行处理。我不能简单地将它指向 apache 日志目录,因为它会在删除之前导入每个文件。它也没有重复记录的概念,所以我无法设置一个 cron 来复制/var/log/apache2/*到文件夹中。
我认为 logrotate 是执行此操作的最佳位置,但我不知道从哪里开始配置它。所以我的问题是:
如何将 logrotate 配置为自动将 SSH 轮换的 apache 日志文件配置到远程主机?
另一种方法是在本地复制并通过 cron运行scp& rm,但一步 SSH 过程会很好。
查看prerotate和postrotate配置选项(中的示例man logrotate)。例如,您可以使用 scp 文件的预旋转(确保正确配置 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 you@elsewhere.com
endscript
}
Run Code Online (Sandbox Code Playgroud)