RegEx筛选器可在RegExr中使用,但不能在Logstash Grok中使用

问题描述 投票:1回答:1

我正在尝试过滤某些日志文件的日志级别。我的问题是Grok似乎无法处理过滤器开始处的\w

我正在使用此网站来验证正则表达式:https://regexr.com/

我正在使用此站点测试Grok过滤器:http://grokdebug.herokuapp.com/

这是我的示例日志行:2020-04-07T13:08:19.261-0700 | INFO |||

这是我要运行的内容:

(?<timestamp>.+?(?=\|))(?<loglevel>\w+?(?= \|))

这表示未找到匹配。如果我将“ \ w”替换为“”。它会立即找到该行,但保留非字母字符:

{
  "timestamp": [
    [
      "2020-04-07T13:08:19.261-0700"
    ]
  ],
  "loglevel": [
    [
      "|INFO"
    ]
  ]
}

应该应该一定有效。它只是说匹配\ w字符。我在这里显然缺少正则表达式知识。是否有人知道发生了什么并愿意以我的方式抛出一些指点?

regex logging logstash logstash-grok
1个回答
1
投票

您的正则表达式与字符串不正确匹配,因为(?=\|)是非消耗性模式,并且该模式在使用\w标记时间戳后无法匹配空格。

您可以使用以下方法修复当前模式:>

(?<timestamp>.+?)\|(?<loglevel>\w+) \|
                 ^^                ^^^

无论如何,这些字段都是使用命名的组捕获创建的,因此这里不需要环顾四周。

注意,您可能会实际使用

%{TIMESTAMP_ISO8601:timestamp}\|%{LOGLEVEL:loglevel}

解析您当前的输入。

© www.soinside.com 2019 - 2024. All rights reserved.