Ahoy!
我知道我参加聚会有点晚了,但就这样吧!
我创建了一个/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 调试器 http://grokdebug.herokuapp.com/,就像亚当在评论中提到的那样。似乎与您发送的示例日志条目配合得很好。我和我的一位客户的合作非常扎实。
上面的模式将最终消息放入errormsg
场地。所以我只是删除message
field.
这是我目前在 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
.
试一试。我很想知道这是否适用于您和其他人!
Cheers!