尝试使用 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>[\w]+)\s\|\s*TASK\s*\[(?<task>[^=]*)
对我来说,困难在于我需要将“任务”标签与以下内容完全匹配:“这是任务名称”。此时“task”匹配“this is the task name msg”。当然,这只是一个示例,单词本身会因示例而异。
这是一个 ansible 日志,它出于某种原因将任务名称和任务本身混合在同一日志行中,并且仅使用空格将它们分隔。在所有情况下,由于“=”符号,我知道任务名称已完成并且正在显示任务详细信息。
所以我需要匹配直到找到“=”,然后否定它后面的单词,在这种情况下是“msg”(取决于任务,这个词也可能改变)。
任何想法如何做到这一点?谢谢!