ES和logstash 版本: 6.8.6
我想要使用 logstash 把一个 ES 集群中的数据迁移到另外一个同版本的集群中,在迁移时配置如下:
请问一下使用 logstash 做ES迁移能否将原来 index 的 mapping 定义直接迁移到新集群上,避免上面的错误发生。
我想要使用 logstash 把一个 ES 集群中的数据迁移到另外一个同版本的集群中,在迁移时配置如下:
input {
elasticsearch {
hosts => ["****", "
****", "****"]
index => "indexname"
user => "username"
password => "password"
size => 1000
scroll => "5m"
docinfo => true
}
}
filter {
mutate {
remove_field => ["@timestamp", "@version"]
}
}
output {
elasticsearch {
hosts => [ "****", "****", "****" ]
user => "username"
password => "password"
index => "%{[@metadata][_index]}"
# document_type => "%{[@metadata][_type]}"
document_id => "%{[@metadata][_id]}"
}
}
迁移的过程中报了许多如下格式的错误,并且文档数量少了一些[2020-08-28T11:52:31,708][WARN ][logstash.outputs.elasticsearch] Could not index event to Elasticsearch. {:status=>400, :action=>["index", {:_id=>"5758291441f
4ea8d3db34289", :_index=>"indexname", :_type=>"doc", :routing=>nil}, #<LogStash::Event:0x17db4dcc>], :response=>{"index"=>{"_index"=>"indexname", "_
type"=>"doc", "_id"=>"5758291441f4ea8d3db34289", "status"=>400, "error"=>{"type"=>"illegal_argument_exception", "reason"=>"mapper [weight] cannot be changed f
rom type [long] to [float]"}}}}
报错的 weight 字段在原ES中的类型是 float ,而新集群中却变成了 long 类型。请问一下使用 logstash 做ES迁移能否将原来 index 的 mapping 定义直接迁移到新集群上,避免上面的错误发生。
2 个回复
stone_xy
赞同来自: xxpy
logstash是不会帮你迁移mapping的,直接启动相当于新集群接收数据后 根据数据自动推断字段类型。
envy666
赞同来自: