我思考我的系统使用 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 获得日期戳 - 那么,问题是星期三的日志在最坏的情况下会覆盖星期二的日志,或者只是无法轮换。所以只要计划总是在午夜后运行这个程序,你就知道你不会遇到这个问题。