Как Вы видите, сообщение не является просто сообщением, но также и содержит дату и метку времени.
. .
Это - MySQL Log: /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-грузоотправителя:/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}
Я пытался зафиксировать это в течение многих недель, и у меня на самом деле был он работающий в один момент, но без вмешательства от моего конца это прекратило работать снова. Какие-либо подсказки относительно отладки?
Похоже, что между полями дата
и время
в ваших записях журнала есть дополнительное пространство, так что ваш грок не совпадает, о чем свидетельствует существование тега _grokparsefailure
.
Попробуйте вместо этого этот образец:
%{NUMBER:date} %{TIME:time} \[%{LOGLEVEL:loglevel}] %{GREEDYDATA:message}
Я проверил это в Grok Constructor и он совпал со всеми предоставленными вами линиями.