【问题标题】:GROK regex capture groups not matchingGROK 正则表达式捕获组不匹配
【发布时间】:2021-05-06 21:20:11
【问题描述】:

我第一次尝试学习如何使用 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*)\]))

当我从 (?&lt;test_data&gt;(?&lt;=\[)([a-zA-Z\.\[\]])*)(?&lt;rest&gt;(?&lt;=\[)(\[(\w*)\])) 中删除后向表达式 (?&lt;=\[) 时,我得到以下结果:

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

我希望得到的结果是:

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

不胜感激帮助/解释我做错了什么

【问题讨论】:

    标签: regex logstash grok


    【解决方案1】:

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

    环视不是消耗模式,它们只是检查某个位置的上下文。因此, (?&lt;=\[) 是一个永远不会匹配的模式,因为空格不能同时是 [ 字符。这就是为什么您的模式不起作用的原因。

    你可以使用

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-24
      • 1970-01-01
      • 2015-08-05
      • 1970-01-01
      • 1970-01-01
      • 2021-05-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多