【发布时间】:2014-03-03 16:47:39
【问题描述】:
问题:查找 2 个月前和 1 个月前之间的日志行,并且这些日志行必须包含几个指定的单词(甚至不需要正则表达式,尽管拥有它们会很好)。
关键:要筛选超过 20T 的日志(已压缩!),并且搜索速度必须很快(最好在几秒钟内完成)。
我的第一个想法是使用 PyTables,因为我在 Pandas 中存储了各种数字数据以及日志行时间戳和日志行本身(我可以使用表格格式 IIRC 存储在 Pandas 的 HDFStore 中),使用内置的 PyTables 查询。不过,我还没有解析整个数据集,只有一小部分日志(用于分析目的)。我已经完成了基本的解析部分(提取时间戳、一些关键参数、添加日志行、保存),但我还需要快速查询部分。
可行吗?有没有更好的 Python 解决方案?
我一直在考虑使用 Postgres 中内置的文本索引器,直到我发现它无论如何都会对表中的列进行线性扫描,所以我不妨使用 grep...
对于索引和扫描如此大的数据集以查找简单的单词模式,有什么更好的解决方案(在 Python 中可用)?京都/东京内阁?
更新:(匿名)日志示例如下。
23419 2013-11-27 12:35:59 [INFO] 12772792:ce7429c9d63dc630dce613ccb5a0ae55:201311271235498008010001 func: item uploaded, path=tt6-nas/itemhome174/pool2/20131127/12/35/252273696_12772792.d
23419 2013-11-27 12:35:59 [WARNING] 12772792:ce7429c9d63dc630dce613ccb5a0ae55:201311271235498008010001 parse_zz: no test found: input=
23413 2013-11-27 12:35:59 [INFO] 15417668:a0f5116658f701fd848ac9fec3743c2c:201311271235578010010001 Test ok, funcname = zzz_get_results itemid = 15417668 ay_id = 959 ip = 22.222.22.22 session_id = a0f5116658f701fd848ac9fec3743c2c
23413 2013-11-27 12:35:59 [INFO] 15417668:a0f5116658f701fd848ac9fec3743c2c:201311271235578010010001 calling testfunc with args={'aa': False, 'medid': 15417668, '_objname': 'aa', '_clt_id': '46.238.87.23', '_pvid': '201311271235578010010001', 'limit': 3, '_login': 'aaa',...
23421 2013-11-27 12:35:59 [INFO] 5642372:1ebd76b4b5c43e36323faf846077a881:201311271235592288010001 calling item_get_info with args={'test': False, '_elemid': 5642372, '_session_id': '1ebd76b4b5c43e36323faf846077a881', ..
23421 2013-11-27 12:35:59 [INFO] 031 items:get_item=0. "time": 0.008256 query: url=http://hostname.tld:9603/getfunc?date=20131127&test1=7&limit=0&itemid=56119 body=85419:: NO_DATA
【问题讨论】:
-
你能给我们举个日志格式的例子吗?
-
@wnnmaw:在更新中添加了一些日志行。
标签: python search indexing pandas pytables