使用Grok Debugger测试Logstash过滤器是否存在Apache错误

时间:2014-02-27 19:22:54

标签: 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 => "\[%{HTTPDATE:timestamp}\] \[%{WORD:class}\] \[%{WORD:originator} %{IP:clientip}\] %{GREEDYDATA:errmsg}"
  }
}

我尝试使用Grok Debugger,但我几乎不知道自己在做什么。我对logstash来说几乎是全新的。

1 个答案:

答案 0 :(得分:5)

所以使用grok调试器应用程序的方法是:

将输入插入"输入"框和grok模式在"模式中匹配此输入"框。这种方法的工作方式是,正则表达式引擎尝试查找您在输入文本中指定的模式的匹配项。提取任何匹配并显示在输出框中(以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},因为您可以看到here

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

要指定的正确模式是:

\[(?<timestamp>%{DAY:day} %{MONTH:month} %{MONTHDAY} %{TIME} %{YEAR})\] \[%{WORD:class}\] \[%{WORD:originator} %{IP:clientip}\] %{GREEDYDATA:errmsg}

在这里,我重新命名了grok模式%{DAY:day}%{MONTH:month}%{MONTHDAY}%{TIME}%{YEAR} 到时间戳&#39;。执行此操作的语法是:

(?<new_name>regular expression / grok). 

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