elasticsearch 将Logstash与MySQL和Elasticsearch一起使用,无法发送数据,elasticsearch,logstash,elasticsearch,Logstash" /> elasticsearch 将Logstash与MySQL和Elasticsearch一起使用,无法发送数据,elasticsearch,logstash,elasticsearch,Logstash" />

elasticsearch 将Logstash与MySQL和Elasticsearch一起使用,无法发送数据

elasticsearch 将Logstash与MySQL和Elasticsearch一起使用,无法发送数据,elasticsearch,logstash,elasticsearch,Logstash,我正在尝试使用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_connec

我正在尝试使用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]"}}}}
[2018-07-03T14:39:06088][WARN][logstash.outputs.elasticsearch]无法将事件索引到elasticsearch。{:状态=>400,:操作=>[“索引”,{:{:{u id=>nil,:{u index=>“客户”,:{u类型=>“文档”,:{u路由=>nil},{35;],:响应=>{“索引”=>{u索引”=>“客户”,“{u类型=>“文档”,“{u id”=>“p-mnygqbziwwwwupovtpes”,“状态”=>400,“错误”=>“类型”=>“非法参数”;“每个原因”=>“得分”=>“无法从浮动类型更改为”}}

在做了一些研究之后,我发现你不能再在ES中使用不同的类型了,我不知道它们到底是什么意思。我能做些什么来解决这个问题?从MySQL数据库向ES发送数据的智能方式是什么?我计划使用ES分析和可视化数据库中的数据。

这是因为使用JDBC驱动程序转换类型的能力有限

字段
uc\U分数
具有MySQL类型
long
thas不会由JDBC在elasticsearch类型
float
中自动转换。因此,您应该将此片段添加到
filter
部分的logstash管道配置中,以转换
uc_分数
字段:

filter {
    mutate { convert => {"uc_score" => "float"} }
}
不要忘记重新启动logstash实例

资料来源: