apache2 使用脚本记录日志

apache2 使用脚本记录日志

我需要分析 Apache2 网络服务器生成的日志。我正在考虑将日志传输到只等待 stdin 输入的脚本,或者每晚使用批处理作业分析日志。

我的一个要求是将一些信息写入数据库(即执行时间、大小、URI、远程 IP)。因此,我对管道传输到脚本并保持数据库连接打开感到担忧。所以我倾向于每晚进行分析。

有人在生产环境中使用过这样的设置或有什么想法吗?

答案1

我建议不要使用管道,因为对于每个请求,您将在 apache 中浪费大量时间来将管道传输到脚本并等待脚本结束以释放 apache 资源。因此,如果出于某种原因,您的数据库执行 INSERT 的速度变得非常慢,则您可能让所有 apache 线程/进程都在等待您的脚本完成您的工作,并且无法用于处理新用户请求

答案2

您可以尝试使用mod-log-sql每次请求时都记录到数据库中。我倾向于在负载较低时每晚记录一次,但这取决于您需要数据的更新程度。

答案3

如果您不需要实时更新数据,那么将日志分析作为夜间作业运行有几个优点:

  • 您可以控制日志分析对 Web 服务器和数据库服务器造成的负载,即不受流量高峰的影响。如果您愿意,您甚至可以在日志文件轮换后将其移至其他服务器进行分析。如果您的应用在多个 Web 服务器上运行,这将非常有用。

  • 如果需要,您可以在将数据插入数据库之前对数据执行聚合。

  • 一些数据库引擎支持某种类型的批量插入,这比一次插入一条记录的相同数据要快得多。

  • 错误处理(分析代码中的错误、不可用的数据库等)更简单——问题解决后只需在相关日志数据上重新运行相同的脚本。

我相信还有其他的,这取决于你的要求和托管情况。我个人甚至不会考虑除非实时更新是绝对必要的,否则 Apache 管道必须,即使这样我也会提取仅有的管道脚本中需要什么,其余一切都用夜间作业来处理。

如果你需要接近实时的解决方案,你应该考虑使用消息队列系统(如活动消息队列,例如),并通过 Apache 日志管道将消息发布到队列。

相关内容