使用logstash迁移ES数据并解决限流等问题,帮你解决90%的问题
input {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "old_index"
query => '{
"query": {
"match_all": {}
}
}'
size => 500
scroll => "5m"
docinfo => true
}
}
filter {
# 在这里添加任何需要的过滤器
}
output {
elasticsearch {
hosts => ["http://new-es-host:9200"]
index => "new_index"
document_type => "%{[@metadata][_type]}"
document_id => "%{[@metadata][_id]}"
# 设置bulk请求的大小和并发
bulk_size => 100
flush_interval => 5
concurrent_requests => 1
# 如果目标ES是5.0+版本,请使用这个
action => "%{__action_metadata__}"
}
# 如果需要,可以启用Logstash控制台输出
stdout { codec => rubydebug }
}
这个配置文件演示了如何使用Logstash从一个Elasticsearch集群迁移数据到新的集群。它包括了必要的input, filter和output部分。在output部分,我们设置了bulk\_size来控制批处理的大小,flush\_interval来控制批处理的间隔,并调整concurrent\_requests来处理并发请求,以避免触发Elasticsearch的限流机制。此外,我们使用了action
和document_type
,这是因为从Elasticsearch 5.0开始,使用的API有所不同。最后,我们可以启用stdout输出来查看正在发生的事情,这在调试和排查问题时非常有帮助。
评论已关闭