Apache 的 access.log 文件占用过多空间

Apache 的 access.log 文件占用过多空间

几个月前,我把所有网站都转到了 Amazon 的 EC2 服务,今天我发现我的硬盘容量已超过 90%。经过一番调查,似乎其中大部分都被 apache 创建的 access.log 文件占用了。

我想知道处理这个问题的最佳方法是什么。我的下意识反应是编写一个每天(或每周、每月,无论什么)运行的小脚本,将所有内容压缩并放在其他地方,以备将来需要时使用 — 最有可能是 Amazon 的 S3。

这是最好的方法吗?或者是否有其他人正在使用的标准做法供我遵循?

编辑:回答一位评论者的问题,该服务器当前运行的是 Linux——准确地说是 Ubuntu

答案1

使用日志旋转实用程序来轮换您的日志。您可以使用postrotate选项运行命令将它们分流到 S3,例如

/usr/bin/s3cmd put /var/log/apache2/access.log.1 s3://your.s3.host/access.log.1  

会成为这个技巧。你可能想要使用该datext选项,这样你的文件就会有日期,例如,access.log-20120713这样你的 postrotate 脚本就会变得稍微复杂一些

/usr/bin/s3cmd put /var/log/apache2/access.log-$(date "+%Y%m%d") s3://your.s3.host/access.log-$(date "+%Y%m%d")

如果你使用compress选项(推荐),你的后旋转将变成

/usr/bin/s3cmd put /var/log/apache2/access.log-$(date "+%Y%m%d").gz s3://your.s3.host/access.log-$(date "+%Y%m%d"),gz

答案2

您首先要考虑的是压缩。由于 Apache 日志的格式,它们的压缩效果非常好。

就像 Iain 建议的那样,logrotate 是你的好朋友。它可以处理压缩,还允许你指定要保留日志的时间。

如果您坚持保留所有日志,您可以设置 logrotate 来邮寄旧日志,或者使用 cron 设置辅助脚本将旧日志存储在 S3 或其他地方。

这是一个很好的资源如果您以前从未使用过 logrotate,请开始使用它。

相关内容