Logstash 使用Grok调试器测试日志存储过滤器是否存在Apache错误

Logstash 使用Grok调试器测试日志存储过滤器是否存在Apache错误,logstash,logstash-grok,Logstash,Logstash Grok,我试图理解如何使用grok过滤我的apache错误日志 我的错误日志文件如下所示: [Thu Feb 27 13:22:44 2014] [error] [client 10.110.64.71] script not found or unable to stat: /var/www/cgi-bin/php4 我如何使用grok来过滤它?我已经做到了这一点: filter { grok { type => "apache-error" pattern => "

我试图理解如何使用grok过滤我的apache错误日志

我的错误日志文件如下所示:

[Thu Feb 27 13:22:44 2014] [error] [client 10.110.64.71] script not found or unable to stat: /var/www/cgi-bin/php4
我如何使用grok来过滤它?我已经做到了这一点:

filter {
  grok {
    type => "apache-error"
    pattern => "\[%{HTTPDATE:timestamp}\] \[%{WORD:class}\] \[%{WORD:originator} %{IP:clientip}\] %{GREEDYDATA:errmsg}"
  }
}

我试着用这个,但我几乎不知道我在做什么。我是logstash的新手。

因此使用grok debugger应用程序的方法如下:

在“输入”框中插入您的输入,并在“模式”框中搜索与此输入匹配的模式。其工作方式是,正则表达式引擎尝试查找输入文本中指定的模式的匹配项。任何匹配项都将被提取并显示在输出框中(以JSON格式,作为您指定的键值对)

Grok模式类似于可重用的合并和重命名正则表达式。就你而言:

Input:  [Thu Feb 27 13:22:44 2014] [error] [client 10.110.64.71] script not found or unable to stat: /var/www/cgi-bin/php4

Your_Pattern: \[%{HTTPDATE:timestamp}\] \[%{WORD:class}\] \[%{WORD:originator} %{IP:clientip}\] %{GREEDYDATA:errmsg}
现在,这显示“没有匹配项”。这是因为,HTTPDATE模式由以下正则表达式组成:%{MONTHDAY}/%{MONTH}/%{YEAR}:%{TIME}%{INT},如您所见

因此,它不能匹配不同的输入日期格式。比赛本身就失败了。正则表达式引擎将开始解析您的输入,以便与指定的正则表达式进行第一次可能的匹配。但是由于它本身找不到开始模式,因此它不会返回任何匹配项

要指定的正确模式如下:

\[(?<timestamp>%{DAY:day} %{MONTH:month} %{MONTHDAY} %{TIME} %{YEAR})\] \[%{WORD:class}\] \[%{WORD:originator} %{IP:clientip}\] %{GREEDYDATA:errmsg}
\[(?%{DAY:DAY}%{MONTH:MONTH}%{MONTHDAY}%{TIME}%{YEAR})\[%{WORD:class}\]\[%{WORD:originator}%{IP:clientip}\]%{greedyddata:errmsg}
在这里,我重新命名了grok模式%{DAY:DAY}%{MONTH:MONTH}%{MONTHDAY}%{TIME}%{YEAR} 到“时间戳”。执行此操作的语法是:

(?<new_name>regular expression / grok). 
(?正则表达式/grok)。

这为使用groks提供了一个很好的解释

post链接中引用的调试器是救命稻草。为将来的读者在这里添加它!