【问题标题】:Using the Grok Debugger to test a Logstash filter for Apache errors使用 Grok 调试器测试 Logstash 过滤器是否存在 Apache 错误
【发布时间】:2014-02-27 19:22:53
【问题描述】:

我试图了解如何使用 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 的新手。

【问题讨论】:

    标签: logstash logstash-grok


    【解决方案1】:

    所以使用 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} 到“时间戳”。这样做的语法是:

    (?<new_name>regular expression / grok). 
    

    post 很好地解释了如何使用 groks。

    【讨论】:

    • 帖子链接中引用的调试器是救命稻草。在这里为未来的读者添加它! grokdebug.herokuapp.com
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多