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}
解析您当前的输入。
我正在尝试过滤我拥有的一些日志文件的日志级别。我的问题是 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}
解析您当前的输入。