理想的日志旋转configuration为重载的网站

我一直在负责一段时间以来一直受到压力的服务器。 我build议目前正在由团队中的其他成员实施的变革,以缓解该网站的核心基础架构问题。 但是,还有一个急需解决的问题就是要买一些时间。

由于日志轮转CRON运行,Apache每天早上7:30重新启动。 6:00 – 9:00是我们的正常站点使用高峰时间,当与CRON结合使用时,服务器内存不足。

什么日志轮转configuration会有帮助? 我应该把它从每天移动到每小时吗? 更改阈值? 只是改变时代(我这样做,仍然遇到了中断)。

EEAA关于使用远程日志服务器的build议完全解决了这个问题,但在您的环境中可能是不可能的。

使用LogRotate 重新加载 Apache,而不是重新启动它,如本网站所述 。 您可能需要将参数更改为每天。 如果您每小时,每天或每周轮换一次,对于停电时间应该没有什么影响。

/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 if [ -d /etc/logrotate.d/httpd-prerotate ]; then \ run-parts /etc/logrotate.d/httpd-prerotate; \ fi; \ endscript } 

在重新加载configuration之前,重新加载应该让Apache完成服务任何打开的请求。 你可能会失去一些要求,但我不认为你会失去很多。 你可能不会输。

如果您需要更高的可靠性,则应考虑两台具有某种运行状况检查或实时故障切换的负载平衡服务器,或使用远程日志服务器。

可以旋转日志,而无需重新启动或重新加载Apache。 缺点是你可能会丢失一些日志条目。

以下是两种方法:

  • 设置一个单独的日志服务器,并使用任何你喜欢的系统日志软件转发Apache日志到那个。 这样的日志旋转处理其他服务器上,不会影响Apache。 缺点是您将增加networkingstream量,并且额外的CPU周期和内存使用量可能会使服务器边缘化,因为它已经接近边缘了。 另外,在交通繁忙的情况下,一些运输线路可能会丢失。
  • 为了开始写入新文件,您可以复制文件的内容,然后清空旧文件,而不是重新加载apache。 好处是你不重新启动Apache。 缺点是你可能会失去一些日志条目,可能会在复制结束和文件归零之间的微秒内写入。 对于这个选项,configuration文件的copytruncate部分应该改为copytruncate

更改cron预定的时间,甚至从日志中删除apache,并根据需要手动设置它。 停止apache服务,暂停几秒钟让apache真的完成closures,重命名日志文件,重新启动apache。 由于您只更名日志文件,它保持在同一个目录中,并发生“即时”。 一旦你的服务恢复,然后移动/压缩/无论日志文件到需要的地方。

如果它变得非常糟糕,我的内部BOFH说,将日志指向/ dev / null,不要担心旋转它们…