日志处理时,遇到多种re表达式轮循匹配的高性能处理方式

Posted yeyong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了日志处理时,遇到多种re表达式轮循匹配的高性能处理方式相关的知识,希望对你有一定的参考价值。

一般的处理方式,是建立一个正则表达式列表,依次尝试匹配,成功则返回,这种方式往往会遇到性能问题

 

  1. 同样的样本数据, 用传统的newlogp方式仅做re部分,用hp做先定位后匹配,后者有明显的优势

ubuntu@VM-0-13-ubuntu:~/highperf_re$ time python normaltest.py

11547.538814992658

 

real 1m27.067s

user 1m26.248s

sys 0m0.212s

说明:上面是用python3跑的一般正则匹配100万条

ubuntu@VM-0-13-ubuntu:~/highperf_re$ time /home/ubuntu/pypy3/bin/pypy3 normaltest.py

22142.39115540099

 

real 0m51.722s

user 0m46.440s

sys 0m0.500s

说明:用pypy3跑的结果,几乎快一倍

ubuntu@VM-0-13-ubuntu:~/highperf_re$ time python hptest.py

379582.7860370719

 

real 0m4.326s

user 0m3.564s

sys 0m0.188s

说明:用hyperscan仅做模式识别(判断使用哪个RE)速度惊人

ubuntu@VM-0-13-ubuntu:~/highperf_re$ time python newtest.py

282825.5283797949

 

real 0m4.742s

user 0m4.540s

sys 0m0.156s

说明: 用hs后,在on_match函数中写re匹配,也没有慢太多,并且,RE表达式越多,hs的方式应该优势越明显

以上是关于日志处理时,遇到多种re表达式轮循匹配的高性能处理方式的主要内容,如果未能解决你的问题,请参考以下文章

处理多服务器日志合并处理问题多服务器的日志合并统计——apache日志的cronolog轮循

python中re库 正则表达式的处理与应用(详细版!!!)

re库:Python中正则表达式的处理与应用

re库:Python中正则表达式的处理与应用

Python常用的正则表达式处理函数详解

re模块 - 正则表达式