【问题标题】:RegEx Filter Works In RegExr But Not Logstash GrokRegEx 过滤器在 RegExr 中有效,但在 Logstash Grok 中无效
【发布时间】:2020-04-13 16:43:28
【问题描述】:

我正在尝试过滤我拥有的一些日志文件的日志级别。我的问题是 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】:

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

    你可以修复你当前的模式

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

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

    注意你可能实际使用

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

    解析您当前的输入。

    【讨论】:

    • 谢谢!你在偏头痛药物上为我省了钱。我希望您和您关心的每个人都保持健康。
    猜你喜欢
    • 2017-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多