RegEx 过滤器适用于 RegExr 但不适用于 Logstash Grok

RegEx Filter Works In RegExr But Not Logstash Grok

我正在尝试过滤我拥有的一些日志文件的日志级别。我的问题是 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 字符。我在这里显然缺乏正则表达式知识。有没有人知道发生了什么并且愿意给我一些建议?

您的正则表达式与字符串不匹配,因为 (?=\|) 是一个非消耗模式,并且该模式无法匹配 space 时间戳后 \w.

您可以通过

修复您当前的模式
(?<timestamp>.+?)\|(?<loglevel>\w+) \|
                 ^^                ^^^

无论如何,这些字段都是使用命名的组捕获创建的,因此您无需在此处查看。

请注意,您实际上可能会使用

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

解析您当前的输入。