【发布时间】:2010-07-25 09:35:44
【问题描述】:
我有一个托管多个虚拟主机的 VPS。每个主机都有自己的 access.log 和 error.log。目前,没有日志轮换设置,但是这可能会改变。
基本上,我想解析这些日志以监控带宽并收集统计信息。
我的想法是编写一个解析器并将信息保存到一个小型 sqlite 数据库中。该脚本将每 5 分钟运行一次,并使用 Python 的 seek 和 tell 方法从最后解析的位置打开日志文件。这可以防止我每 5 分钟解析一次 10GB 日志文件,而我只需要位于文件末尾的新信息(没有日志轮换,记得吗?)。
经过一番思考,我意识到我所做的只是从日志文件中获取信息并将它们放入数据库...将数据从一个位置移动到另一个位置:/
那么我还能怎么做呢? 我希望能够做类似的事情:
python logparse.py --show=bandwidth --between-dates=25,05|30,05 --vhost=test.com
这将打开 test.com 的日志文件并显示指定 5 天内使用的带宽。
现在,我的问题是,当我只需要 5 天的数据时,如何防止自己解析 10GB 的数据?
如果我使用我的想法,即每 5 分钟将日志数据保存到数据库中,我可以只保存日期的 unix 时间戳并提取它们之间的数据。简单的。但我更喜欢直接解析日志文件。
【问题讨论】: