Ответ 1
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 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
.
Сделайте снимок. Я хотел бы знать, работает ли это для вас и других!
Ура!