gpt4 book ai didi

python - 需要一些关于如何编写我的日志解析器的想法

转载 作者:太空宇宙 更新时间:2023-11-04 01:42:39 24 4
gpt4 key购买 nike

我有一个托管多个虚拟主机的 VPS。每个主机都有自己的 access.log 和 error.log。目前,没有日志轮换设置,不过,这可能会改变。

基本上,我想解析这些日志以监控带宽并收集统计数据。

我的想法是编写一个解析器并将信息保存到一个小型 sqlite 数据库中。该脚本将每 5 分钟运行一次,并使用 Python 的 seektell 方法从上次解析的位置打开日志文件。这可以防止我每 5 分钟解析一个 10GB 的日志文件,而我所需要的只是位于文件末尾的新信息(没有日志轮换,还记得吗?)。

经过一番思考,我意识到我所做的只是从日志文件中获取信息并将它们放入数据库中...将数据从一个位置移动到另一个位置:/

那么我还能怎么做呢?我希望能够做类似的事情:

python logparse.py --show=bandwidth --between-dates=25,05|30,05 --vhost=test.com

这将打开 test.com 的日志文件并显示指定 5 天的带宽使用情况。

现在,我的问题是,当我只需要 5 天的数据时,如何防止自己解析 10GB 的数据?

如果我使用每 5 分钟将日志数据保存到数据库中的想法,我可以只保存日期的 unix 时间戳并提取它们之间的数据。简单的。但我更愿意直接解析日志文件。

最佳答案

除非您每天创建不同的日志文件,否则您只能根据请求解析整个日志。

我仍然会使用数据库来保存日志数据,但使用您想要的时间单位分辨率(例如,以天/小时为间隔保存带宽)。使用数据库的另一个优势是您可以非常轻松且快速地进行范围查询,就像您在示例中给出的那样。当您有不再需要的旧数据时,您可以将其从数据库中删除以节省空间。

此外,您不需要每次都解析整个文件。您可以在 pyinotify 的帮助下监控对文件的写入每当写入一行时,您都可以更新数据库中的计数器。或者,您可以在每次读取文件时存储文件中的最后一个位置,并在下一次从该位置读取。文件被截断时要小心。

总结一下:

  • 按天分辨率将您的数据保存在数据库中(例如,每天的带宽)
  • 使用 pyinotify 监控对日志文件的写入,这样您就不会一遍又一遍地读取整个文件

如果您不想编写自己的解决方案,请查看 Webalizer , AWStats或从 this list 中选择一个工具.

编辑:

WebLog Expert看起来也很有前途。看看其中一个 reports .

关于python - 需要一些关于如何编写我的日志解析器的想法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3328688/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com