Apache 提供了一个名为 rotatelogs 的工具,它的优点是轮换日志时不需要重新启动 apache,而使用 logrotate 则需要重新启动。我没有足够的经验来判断这是否是使用 rotatelogs 而不是 logrotate 的充分标准。
我的问题是,是否有人在现实生活中使用过这两种工具,以及您的意见是什么?
您会推荐什么以及为什么?
答案1
对于大多数人,我建议使用 logrotate,因为它会轮换所有其他日志(KISS:保持简单愚蠢)。Logrotate 不会重新启动整个 Apache,而是只向它发送一个信号,告诉它重新打开所有日志文件并重新启动子进程。此信号可以是 SIGHUP,它会导致子进程立即重新启动(这将中断下载),也可以是 SIGUSR1,它会进行正常重新启动。使用 SIGUSR1,您必须延迟日志处理,直到您认为所有子进程都会自然死亡。无论哪种方式,您可能都希望分析日志,并将其时间安排在一天或一周中流量最低的时段。
管道日志似乎是更强大的解决方案。一个很大的优点是它允许您使用集中式日志系统并承担 Web 服务器本身的负载。手册本身说:
与条件日志记录一样,管道日志是一种非常强大的工具,但在有离线后处理等更简单的解决方案可用的地方不应使用它们。
因此,显然,如果你不需要它。我过去曾使用管道日志作为一种过滤日志的黑客方式,并没有遇到任何问题。
答案2
我之前都用过。我发现,如果您不希望 apache 停机,rotatelogs 是管理访问日志的非常有用的工具。在高流量站点上,我会推荐这个,我发现的唯一问题是,如果您想管理日志,您需要有一个单独的 cron 脚本来清理日志或将日志移动到备份服务器,显然这取决于要求。使用 logrotate,您可以有更多处理日志文件的选项,唯一的问题是当 logrotate 运行时,如上一个答案中所述,您需要重新启动 apache。
基本上一切都取决于选择,如果您需要 apache 不间断运行,那么可以使用外部 cron 脚本来管理 rotatelogs,否则 logrotate 就足够了。只需确保在流量较大时设置 logrotate cron 不轮换日志即可。
最后,如果您希望将 apache 记录到您的系统日志中,您可以随时使用基于 Redhat 的 Linux 上的 logger 命令。