我试图解析我的apache2错误日志,我有点麻烦..它似乎没有匹配过滤器。我很确定时间戳是错误的,但我不确定,我真的找不到任何文件来弄明白。另外,有没有办法让fields.errmsg
给我@message
?{/ p>
日志
[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'
}
}
答案 0 :(得分:29)
嗨!
我知道我在聚会上有点迟到了,但就在这里!
我在系统上创建了一个/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进行测试,就像亚当在评论中提到的那样。似乎可以正常使用您发送的示例日志条目。我和我的一位客户一直在努力工作。
上面的模式将最终消息放在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
。
给它拍摄。我很想知道这对你和其他人是否有用!
干杯!
答案 1 :(得分:10)
我们的错误日志看起来有点不同:
[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
中查看此内容
答案 2 :(得分:3)
没有为我工作:
EEE MMM dd HH:mm:ss yyyy
为我工作(Apache 2.4):
EEE MMM dd HH:mm:ss.SSSSSS yyyy
答案 3 :(得分:2)
Logstash有一个内置的apache日志解析器。
这是一个例子......
grok {
type => 'company'
pattern => ["%{COMBINEDAPACHELOG}"]
add_tag => "apache"
}
作为参考,您可以查看Logstash的docs