Назад | Перейти на главную страницу

Logstash неправильно обрабатывает журналы MySQL

Как видите, сообщение - это не просто сообщение, но также содержит дату и метку времени.

. .

Это журнал 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 и он соответствует всем указанным вами строкам.