Используя Logstash с MySQL и Elasticsearch, невозможно отправить данные - PullRequest
0 голосов
/ 03 июля 2018

Я пытаюсь отправить данные в ES с сервера MySQL, используя logstash. Я использую ES 6.3.0 и Logstash 6.3.0. Мой конфигурационный файл выглядит следующим образом:

input {
    jdbc {
        jdbc_driver_library => "/Users/.../mysql-connector-java-5.1.46-bin.jar"
        jdbc_driver_class => "com.mysql.jdbc.Driver"
        jdbc_connection_string => "jdbc:mysql://..."
        jdbc_user => "user"
        jdbc_password => "****"
        statement => "SELECT * FROM user.customer"
    }
}
output {
    #stdout { codec => json_lines }
    elasticsearch {
        hosts => "localhost"
        index => "customers"
    }
}

Я использую базу данных MySQL с одной таблицей, в которой есть несколько столбцов разных типов данных. Когда я пытаюсь отправить данные в ES, я получаю следующее сообщение об ошибке:

[2018-07-03T14:39:06,088][WARN ][logstash.outputs.elasticsearch] Could not index event to Elasticsearch. {:status=>400, :action=>["index", {:_id=>nil, :_index=>"customers", :_type=>"doc", :_routing=>nil}, #<LogStash::Event:0x2ff3608c>], :response=>{"index"=>{"_index"=>"customers", "_type"=>"doc", "_id"=>"p-MnYGQBzIWWUpovTpES", "status"=>400, "error"=>{"type"=>"illegal_argument_exception", "reason"=>"mapper [uc_score] cannot be changed from type [long] to [float]"}}}}

После некоторых исследований я обнаружил, что вы не можете больше использовать разные типы в ES, но я не совсем уверен, что они означают. Что я могу сделать, чтобы решить эту проблему? Что такое умный способ отправки данных из базы данных MySQL в ES? Я планирую использовать ES для анализа и визуализации данных в базе данных.

1 Ответ

0 голосов
/ 03 июля 2018

Это связано с ограниченной возможностью конвертировать типы с помощью драйвера JDBC.

Поле uc_score имеет тип MySQL long, которое не преобразуется автоматически JDBC в тип поиска упругого поиска float. Поэтому вам нужно добавить этот фрагмент в конфигурацию конвейера logstash в разделе filter, чтобы преобразовать поле uc_score:

filter {
    mutate { convert => {"uc_score" => "float"} }
}

Не забудьте перезапустить ваш экземпляр logstash!

Источник: Импорт данных из MySQL в Elasticsearch для визуализации их с помощью Kibana

...