Apache 访问日志轮换

Apache 访问日志轮换

思考我的系统使用 logrotate 来轮换日志,包括 httpd 日志

“当前”文件记录在这里 /var/log/httpd/ 但是我只看到最近 5 天(我认为)

但是我如何才能找到以前的日志文件所在的位置。我以为它们是在与当前日志文件相同的位置创建的。

我一直在 logrotate 中寻找但没有任何进展,这里有谁可以帮助我吗?

提前致谢,

鲍勃

答案1

您的 logrotate 配置文件中可能有类似这样的内容

"/var/log/httpd/access.log" /var/log/httpd/error.log {
           rotate 5
           size=100k
           sharedscripts
           postrotate
                                     /sbin/killall -HUP httpd
           endscript
       }

rotate 5 表示只保留最后 5 个文件。这里文件每 100k 旋转一次。
如果您有 daily 关键字,则意味着每个存档文件都是 1 天的日志。如果您想在服务器上保留文件更长时间,则必须增加 rotate 值

答案2

Logrotate 通常会使用相同的文件名并附加一个数字,例如access.log.1。压缩日志后面会有一个.gz,因此较旧的访问日志将是access.log.3.gz(例如)。

还有其他方法可以重命名旧日志文件(例如按日期),但它们相对不常见,并且如果您不明确执行此操作,它们不太可能被配置。

答案3

正如其他人在这里指出的那样,看起来旧的已经消失了。我最终编写了每天运行的自定义轮换脚本,以便我们可以将 Apache 日志保存更长时间以供分析。唯一的技巧是您必须在重命名文件后立即重新启动 Apache。

当然,如果您按照我们的做法,使用 YYYYMMDD 这样的日期模式命名文件,我建议您在午夜后不久启动重命名脚本,而不是在此之前。这是违反直觉的,因为这样文件就会被“错误”命名,但如果您的脚本与我的脚本类似,并且必须从许多网站轮换和压缩许多巨大的日志,则可能需要一些时间。您只是不希望您的脚本在哪一天获得它的日期戳有任何歧义 - 如果它在星期一运行并且负载很低,它会在 23:59 获得日期戳,但星期二的负载非常高,它会在 00:01 获得日期戳 - 那么,问题是星期三的日志在最坏的情况下会覆盖星期二的日志,或者只是无法轮换。所以只要计划总是在午夜后运行这个程序,你就知道你不会遇到这个问题。

相关内容