关于 apache 日志文件的建议

关于 apache 日志文件的建议

我有一个小型 VPS,我和朋友用它来托管几个网站。我们对服务器管理都比较缺乏经验,并且不确定如何有效地处理 Apache 生成的日志。

每个站点都会在类似以下的目录结构中生成自己的日志文件:

/var/www/{user]/{sitename}/logs

问题是其中一些变得相当大(300mb)。我正在考虑安装日志旋转来帮助解决这个大小问题。但是我不确定处理日志的有效方法,因为这些不是关键站点,因此我认为日志不是那么重要。

处理日志的推荐做法是什么?您对这些问题有什么建议/意见?

答案1

日志旋转绝对是可行的方法。由于日志的大小不断增长,您可以使用 logrotate 来显著压缩日志。假设您使用 apache,请修改以下内容

/etc/logrotate.d/httpd

你会希望它看起来像这样:

"/var/log/httpd/site1/*.log" "/var/log/httpd/site2/*.log" {
weekly
rotate 7
compress
missingok
notifempty
sharedscripts
postrotate
/sbin/service httpd reload > /dev/null 2>/dev/null || true
endscript
}
  • 每周:如果当前工作日早于上次轮换的工作日或者自上次轮换以来已过去一周以上,则轮换日志文件。
  • 旋转 7:日志文件在被删除或邮寄到邮件指令中指定的地址之前会轮换 52 次。如果计数为 0,则删除旧版本,而不是轮换。
  • 压缩:旧版本的日志文件使用 gzip 压缩以节省磁盘空间。
  • 米辛戈克:如果日志文件丢失,则继续下一个,而不会发出错误消息。
  • 空通知:如果日志为空,则不轮换日志
  • 共享脚本:通常,prerotate 和 postrotate 脚本会针对每个轮换的日志运行,这意味着单个脚本可能会针对与多个文件匹配的日志文件条目运行多次。如果指定了 sharedscript,则无论有多少日志与通配符模式匹配,脚本都只会运行一次。但是,如果模式中没有任何日志需要轮换,则根本不会运行脚本。
  • 后旋转 /sbin/service httpd 重新加载>/dev/null 2>/dev/null || true
  • 结束语:postrotate 和 endscript 之间的行(它们必须单独出现在行上)在日志文件旋转后执行。这些指令只能出现在日志文件定义中。

编辑:正如卢卡斯所说:你可能还想检查一下为什么你的日志被填满了。这可能会指向一些不良代码,或者可能有人试图通过表单等进行恶意操作

如果你需要更多关于选项的信息,只需使用

手动旋转

答案2

我确实会使用 logrotate,压缩后,您的 300 MB 将变成仅仅 8 MB。您还可以编写脚本,以便每隔一段时间将压缩的日志备份到远程服务器(或其他备份驱动器),然后删除这些日志。

如果这些站点并不重要,您可以在一段时间后丢弃这些日志(当您认为它们不再有用时由您决定)。

您可能还想检查一下日志为什么会填满。代码中可能有一些可以轻松修复的警告,或者只是不必要的调试信息。

相关内容