GROK正则表达式捕获组不匹配



我第一次尝试学习如何使用logstash的grok过滤器捕获日志文件中的不同字段,但在正确解析它时遇到了问题。我正在使用https://grokdebug.herokuapp.com/测试我的工作。这是一个示例日志文件:

06/05/2021 15:08:48.591 - [aa.bbbbbbbbbbbbbbb.cccccccccc.ddddddd.EEEeeeEeeeeEeeeeee.ffffFffffFff] - [INFO] - some more text here (0:1): {"data":{"source":"ttyUSB0","timeTotal":"20","timeLeft":"10"},"somethingid":"main","secret":"aqdsaqlaxgaaaaaa444aa32aa1aa3aaa1aaaaaaawghhjuyeqbbjjga7a64aaa","type":"TEST","message":"SOMEMESSAGE","testid":"foo.bar1.1620313718583","timestamp":1620313728590}

我使用的grok表达式(且不返回结果(是

%{DATESTAMP:timestamp} - (?<test_data>(?<=[)([a-zA-Z.[]])*) - (?<rest>(?<=[)([(w*)]))

当我从(?<test_data>(?<=[)([a-zA-Z.[]])*)(?<rest>(?<=[)([(w*)]))中删除查找表达式(?<=[)时,我得到以下结果:

  • test_data: [aa.bbbbbbbbbbbbbbb.cccccccccc.ddddddd.EEEeeeEeeeeEeeeeee.ffffFffffFff]
  • rest: [INFO]

我希望得到的结果是:

  • test_data: aa.bbbbbbbbbbbbbbb.cccccccccc.ddddddd.EEEeeeEeeeeEeeeeee.ffffFffffFff
  • rest: INFO

如果我做错了什么,请提供帮助/解释

您正在匹配模式的序列,因此您需要使用它们,否则正则表达式引擎无法访问后续(最右边(的模式部分。

查找不是使用模式,它们只是检查某个位置的上下文。因此,(?<=[)是一种永远不会匹配的模式,因为一个空间不能同时是[字符。这就是为什么你的模式不起作用。

你可以使用

%{DATESTAMP:timestamp} - [%{DATA:test_data}] - [%{DATA:rest}]

现在,正则表达式引擎将找到timestamp模式,然后它将消耗空间+-+空间,然后是一个[字符,然后是test_data] - [rest部分和]字符。

相关内容

  • 没有找到相关文章

最新更新