Как видите, сообщение - это не просто сообщение, но также содержит дату и метку времени.
. .
Это журнал MySQL: /var/log/mysql/error.log
150630 9:01:29 [Warning] Access denied for user 'test1'@'localhost' (using password: YES)
150630 9:03:39 [Warning] Access denied for user 'test3'@'localhost' (using password: YES)
150630 9:07:48 [Warning] Access denied for user 'test5'@'localhost' (using password: YES)
150630 9:10:00 [Warning] Access denied for user 'test7'@'localhost' (using password: YES)
150630 9:12:21 [Warning] Access denied for user 'test9'@'localhost' (using password: YES)
Это конфигурация Logstash-shipper: /etc/logstash/shipper/conf.d/20-filter.conf
else if [type] == "mysql" {
grok {
patterns_dir => "/etc/logstash/patterns"
match => [ "message", "%{MYSQLLOG}" ]
overwrite => [ "message" ]
}
}
Это шаблон:
MYSQLLOG %{NUMBER:date} %{TIME:time} \[%{LOGLEVEL:loglevel}\] %{GREEDYDATA:message}
Я пытался исправить это в течение нескольких недель, и в какой-то момент он действительно работал, но без моего вмешательства он снова перестал работать. Какие-нибудь советы по отладке?
Похоже, в ваших записях журнала есть лишнее пространство между date
и time
полей, поэтому ваш Grok не совпадает, о чем свидетельствует наличие _grokparsefailure
тег.
Вместо этого попробуйте этот шаблон:
%{NUMBER:date} %{TIME:time} \[%{LOGLEVEL:loglevel}] %{GREEDYDATA:message}
Я тестировал это в Конструктор Grok и он соответствует всем указанным вами строкам.