是否有任何Python实现的logstash的grok功能?

时间:2014-04-15 08:46:43

标签: python regex string-parsing logstash

Logstash's grok是一个基于正则表达式构建的字符串解析工具,它提供了许多模式,使字符串解析工作变得更加容易,我第一次使用它时就爱上了它。但不幸的是,它是用Ruby编写的,因此无法在我的Python项目中使用,所以我想知道是否有任何Python实现的grok,或者是否有任何Python替代方案可以像grok那样简化字符串解析?

2 个答案:

答案 0 :(得分:7)

我在github中基于@georg的答案构建了一个名为pygrok的项目,以满足我在python代码中的日志模式解析要求。我认为pygrok可能对你有所帮助,让我来介绍一下简而言之:

pygrok

用于解析字符串并从结构化/非结构化数据中提取信息的Python库

我可以使用Grok做什么?

  • 解析和匹配字符串中的模式(日志,消息等)
  • 从复杂的正则表达式中解脱出来。
  • 从结构化/非结构化数据中提取信息

你可以找到它here

答案 1 :(得分:5)

我不知道grok的任何python端口,但这个功能看起来非常简单:

import re

types = {
    'WORD': r'\w+',
    'NUMBER': r'\d+',
    # todo: extend me
}


def compile(pat):
    return re.sub(r'%{(\w+):(\w+)}', 
        lambda m: "(?P<" + m.group(2) + ">" + types[m.group(1)] + ")", pat)


rr = compile("%{WORD:method} %{NUMBER:bytes} %{NUMBER:duration}")

print re.search(rr, "hello 123 456").groupdict()
# {'duration': '456', 'bytes': '123', 'method': 'hello'}