繁体   English   中英

使用Grok for Logstash解析Apache2错误日志

[英]Parse Apache2 Error logs with Grok for Logstash

我试图解析我的apache2错误日志,我有点麻烦..它似乎没有匹配过滤器。 我很确定时间戳是错误的,但我不确定,我真的找不到任何文件来弄明白。 另外,有没有办法在fields.errmsg获取@message

日志

[Wed Jun 26 22:13:22 2013] [error] [client 10.10.10.100] PHP Fatal error:  Uncaught exception '\Foo\Bar'

托运人配置

input {
        file {
                'path' => '/var/log/apache2/*-error.log'
                'type' => 'apache-error'
        }

}

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


output {
        stdout {}
        redis {
                'data_type' => 'list'
                'host' => 'logstash.server.net'
                'key' => 'logstash'
        }
}

嗨!

我知道我在聚会上有点迟到了,但是在这里!

我在系统上创建了一个/etc/logstash/patterns.d/目录,并在其中创建了一个名为apache-error的文件,其中包含:

APACHE_ERROR_TIME %{DAY} %{MONTH} %{MONTHDAY} %{TIME} %{YEAR}
APACHE_ERROR_LOG \[%{APACHE_ERROR_TIME:timestamp}\] \[%{LOGLEVEL:loglevel}\] (?:\[client %{IPORHOST:clientip}\] ){0,1}%{GREEDYDATA:errormsg}

/etc/logstash/patterns.d/将在logstash配置中引用,如下所示:

grok {
  patterns_dir => [ "/etc/logstash/patterns.d" ]
  match => [ "message", "%{APACHE_ERROR_LOG}" ]
}

您可以在Grok Debugger中测试它,就像Adam在评论中提到的那样。 似乎可以正常使用您发送的示例日志条目。 我和我的一位客户一直在努力工作。

上面的模式将最终消息放在errormsg字段中。 所以我只删除了message字段。

这是我目前在我的logstash配置中使用的内容:

filter {
  if [type] == "apache_error_log" {

    grok {
      patterns_dir => [ "/etc/logstash/patterns.d" ]
      match => [ "message", "%{APACHE_ERROR_LOG}" ]
    }

    if !("_grokparsefailure" in [tags]) {

      mutate {
        remove_field => [ "message" ]
        add_field =>  ["timestamp_submitted", "%{@timestamp}"]
      }

      date {
        # Try to pull the timestamp from the 'timestamp' field (parsed above with
        # grok). The apache time format looks like: "18/Aug/2011:05:44:34 -0700"
        #                        Sat Feb 08 06:31:09 2014
        match => [ "timestamp", "EEE MMM dd HH:mm:ss yyyy" ]
        remove_field => [ "timestamp" ]
      }

      geoip {
        source => "clientip"
      }
    }
  }
}

请注意,我使用的是一种apache_error_log而不是apache-error

给它拍摄。 我很想知道这对你和其他人是否有效!

干杯!

我们的错误日志看起来有点不同:

[Tue Dec 08 12:30:35.997887 2015] [ssl:info] [pid 1178:tid 1072] (70014)End of file found: [client 10.129.24.77:49987] AH01991: SSL input filter read failed.

但我找到了一个完美的预定义模式:

HTTPD24_ERRORLOG

Logstash源中看到这一点

不适合我:

EEE MMM dd HH:mm:ss yyyy

为我工作(Apache 2.4):

EEE MMM dd HH:mm:ss.SSSSSS yyyy

Logstash有一个内置的apache日志解析器。

这是一个例子......

grok {
   type    => 'company'
   pattern => ["%{COMBINEDAPACHELOG}"]
   add_tag => "apache"
}

作为参考,您可以查看Logstash的文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM