Regex 从符号到上一个空格取反
尝试使用logstash grok过滤器(oniguruma regex)来过滤一些日志。对于如下所示的日志条目:Regex 从符号到上一个空格取反,regex,logstash,logstash-grok,oniguruma,Regex,Logstash,Logstash Grok,Oniguruma,尝试使用logstash grok过滤器(oniguruma regex)来过滤一些日志。对于如下所示的日志条目: 2019-03-24 17:57:14,202 p=19455 u=root | TASK [this is the task name msg=Debug message] ************************ 我编写了这个过滤器: %{DATE:date}\s%{TIME:time}\sp=(?<id>[\d]+)\su=(?<user>
2019-03-24 17:57:14,202 p=19455 u=root | TASK [this is the task name msg=Debug message] ************************
我编写了这个过滤器:
%{DATE:date}\s%{TIME:time}\sp=(?<id>[\d]+)\su=(?<user>[\w]+)\s\|\s*TASK\s*\[(?<task>[^=]*)
%{DATE:DATE}\s%{TIME:TIME}\sp=(?[\d]+)\su=(?[\w]+)\s\\\s*任务\s*\[(?[^=]*)
对我来说,这里的困难在于,我需要将“任务”标签与以下内容完全匹配:
“这是任务名称”。此时“任务”与“这是任务名称消息”匹配。
当然,这只是一个例子,单词本身会随着例子的不同而变化
这是一个ansible日志,出于某种原因,它将任务名称和任务本身混合在同一个日志行中,并且只使用空格分隔它们。在所有情况下,我都知道任务名称已经完成,任务详细信息正在显示,因为“=”符号
所以我需要进行匹配,直到找到一个“=”,然后否定它后面的单词,在本例中是“msg”(根据任务的不同,这个单词也可能发生变化)
有什么办法可以做到这一点吗?谢谢!您可以使用
%{DATE:date}\s%{TIME:time}\su=(?<user>\w+)\s\|\s*TASK\s*\[(?<task>[^\]=]*)\s\w+=
%{DATE:DATE}\s%{TIME:TIME}\su=(?\w+)\s\\\s*TASK\s*\[(?[^\]=]*)\s\w+=
见
(?[^\]=]*)\s\w+=
部分很有趣:
-名为“任务”的组:(?[^\]=]*)
匹配除[^\]=]*
和]
之外的任何0+字符=
-一个空格\s
-1+字字符\w+
-a=
字符=
%{DATE:DATE}\s%{TIME:TIME}\su=(?[\w]+)\s\\\s*TASK\s*[(?[^\]=]]]*)\smsg=
Hi Wiktor!在更正了一些小的打字之后,你的过滤器可以工作,但它只能在给定的示例中工作。“msg”并不总是“=”符号前面的单词(我试图解释这一点,但我的英语作为我的正则表达式技能非常有限)。有没有一种方法可以在“=”之前立即否定任何单词?在这种情况下,它正好是“msg”,但它可以是任何形式(“token”、“state”、“path”…谁知道还有什么)。好的。没关系。谢谢你的例子,我能够想象出一个可能的解决方案。“%{DATE:DATE}\s%{TIME:TIME}\sp=(?[\D]+)\su=(?[\w]+)\s\\s\\s\\sTASK s*(?[^]=])\s(\w)*=“这是工作,idk如果这是好的或不好,但它的工作。非常感谢你!!!