与脚本apache2日志logging

我需要分析由Apache2 webserver生成的日志。 我正在考虑将日志传输到一个脚本,该脚本将等待stdininput,或者使用批处理作业每晚分析日志。

我的一个要求是将一些信息写入数据库(即执行时间,大小,URI,远程IP)。 出于这个原因,我担心pipe道到脚本并保持数据库连接打开。 所以我倾向于每晚的分析。

任何人在生产环境中使用这样的设置或有任何想法?

我会build议不要使用pipe道,因为foreach请求你将失去很多时间在Apache中pipe道到脚本,并等待脚本的结束,以释放Apache资源。 所以,如果由于某种原因,你的数据库变得很慢,你可以让所有的apache线程/进程等待脚本完成你的工作,不能用来处理新的用户请求

您可以尝试使用mod-log-sql在每个请求上login到数据库。 我的偏好是当你有较低的负载时,每晚做一些事情,但这取决于你需要数据的最新情况。

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

  • 您可以控制由日志分析引起的Web服务器和数据库服务器上的负载,即。 它不受交通高峰的影响。 如果你喜欢,你甚至可以把你的日志文件移动到另一台服务器上进行分析。 如果您的应用程序在多个Web服务器上运行,这非常有用。

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

  • 一些数据库引擎支持某种forms的插入,比一次插入一条logging要快得多。

  • error handling(分析代码中的错误,不可用的数据库等)更简单 – 修正问题后重新运行相关日志数据上的相同脚本。

我确定有其他人,根据您的要求和托pipe情况。 就个人而言,我甚至不会考虑 Apache的pipe道系统,除非实时更新是绝对必要的 ,即使如此,我也只能提取pipe道脚本中所需的内容,并在每晚的工作中处理所有其他事情。

如果您需要接近实时解决scheme,则应考虑使用消息队列系统(例如ActiveMQ ),并通过Apache日志pipe道将消息发布到队列中。