我正在尝试为下面的日志写一个grok过滤器但是得到了grokfailure。我是新手,请帮助我。
日志: msg.repository.routed.ABC_MAS:101 :: 20170526-05:03:08:从远程主机获得t-rate< 0.068>和f-大小< 68>进入tmp目录 msg.repository.routed.ABC_MAS:101 :: 20170526-05:03:07:以t-rate< 0.068>从远程主机获得。和f-大小< 68>进入tmp目录 msg.repository.routed.BCD_MAS:101 :: 20170526-00:04:34:sftp连接到1.2.2.1(msg),timeOut:1000 msg.repository.routed.ABC_MAS:101 :: 20170526-00:04:37:sftp连接到1.2.2.1(msg),timeOut:1000
我使用的Grok模式: 过滤器{ grok { match => {“message”=> '(?:%{GREEDYDATA:pullpathinfo}):%{NUMBER:thread} ::%{NUMBER:date} - %{NUMBER:HOUR}:%{NUMBER:MINUTE}:%{NUMBER:SECOND} :(? :sftp连接到%{IPORHOST:remoteip}%{GREEDYDATA:msg})'} match => {“message”=> '(?:%{GREEDYDATA:pullpathinfo}):%{NUMBER:thread} ::%{NUMBER:date} - %{NUMBER:HOUR}:%{NUMBER:MINUTE}:%{NUMBER:SECOND} :(? :得到\<%{GREEDYDATA:filename}>%{GREEDYDATA:rate_size})'} } }
答案 0 :(得分:0)
为了开发grok模式,我建议你使用Grok Debugger。它允许您逐步构建grok模式。
对于跟随日志(在问题的日志行中):
msg.repository.routed.ABC_MAS:101::20170526-00:04:37: sftp connected to 1.2.2.1(msg), timeOut:1000
以下grok模式将起作用:
%{USERNAME:pullpathinfo}:%{NUMBER:thread}::%{NUMBER:date}-%{TIME:time}: sftp connected to %{IPORHOST:remoteip}%{GREEDYDATA:msg}
以下更改是相关的:
%{WORD} %{WORD}
与%{WORD}%{WORD}
不同。在您的模式中,%{IPORHOST:remoteip}
和%{GREEDYDATA:msg}
之间存在太多空格。 %{USERNAME}
而不是%{GREEDYDATA}
(GREEDYDATA只应用于日志行中的剩余部分。即使模式USERNAME有一个不适合的名称,它背后的模式看起来像一个非常合适,因为它包含[a-zA-Z0-9._-]+
(但不包括冒号:
)%{TIME}
代替'%{NUMBER:HOUR}:%{NUMBER:MINUTE}:%{NUMBER:SECOND} 我希望这会有所帮助。