2017-05-27 147 views
0

我试着写一个grok过滤器为以下日志,但得到grokfailure。我是logstash的新手,请帮助我。logstash为自定义日志

日志: msg.repository.routed.ABC_MAS:101 :: 20170526-05:03:08:从远程主机在t-速率< 0.068>和f-大小< 68>到TMP DIR MSG得到。 repository.routed.ABC_MAS:101 :: 20170526-05:03:07:从远程主机以t-rate < 0.068>和f-size < 68>获取到tmp目录 msg.repository.routed.BCD_MAS:101 :: smsp连接到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模式: filter { grok {= {“message”=>'(?:%{GREEDYDATA:pullpathinfo}):%{NUMBER:thread} ::%{NUMBER:date} - %{NUMBER:HOUR}:%{NUMBER :%{数字:SECOND}:(?:sftp连接到%{IPORHOST:remoteip}%{GREEDYDATA:msg})'} match => {“message”=>'(?:%{GREEDYDATA: ):%{NUMBER:thread} ::%{NUMBER:date} - %{NUMBER:HOUR}:%{NUMBER:MINUTE}:%{NUMBER:SECOND}:(?:got \ <%{GREEDYDATA: %{GREEDYDATA:rate_size})'} } }

回答

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 

以下神交模式将工作:

%{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}

我希望这有助于。