我正在尝试使用Logstash将数据从MySQL服务器发送到ES。我正在使用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来分析和可视化数据库中的数据。
这是由于使用JDBC驱动程序转换类型的能力有限。
字段uc_score
具有MySQL类型long
thas不会由JDBC自动转换为elasticsearch类型float
。因此,您应该将此片段添加到“ logstash管道”filter
部分的“转换uc_score
字段”部分中:
filter {
mutate { convert => {"uc_score" => "float"} }
}
不要忘记重启您的logstash实例!
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句