input {
elasticsearch {
hosts => [{iplist}]
index => "{indexname}"
size => 1000
scroll => "5m"
docinfo => true
}
}
查询数据结果都是重复数据,而且在不断的写入,logstash根本停不下来。查询debug输出,发现解析结果就是一堆重复数据,所以可以定位是es input的问题。
logstash同时报如下错误:
[ERROR][logstash.pipeline ] A plugin had an unrecoverable error. Will restart this plugin.
Plugin: <LogStash::Inputs::Elasticsearch hosts=>["xxxx:9200"], index=>"xxxx", size=>1000, scroll=>"5m", docinfo=>true, id=>"0c0d97f3442bde5e47448f1ac819c918d0a89dc3-1", enable_metric=>true, codec=><LogStash::Codecs::JSON id=>"json_4252917a-5d59-4bee-8d9a-240f3a16c8ac", enable_metric=>true, charset=>"UTF-8">, query=>"{ \"sort\": [ \"_doc\" ] }", docinfo_target=>"@metadata", docinfo_fields=>["_index", "_type", "_id"], ssl=>false>
Error: [400] {"error":"ElasticsearchIllegalArgumentException[Failed to decode scrollId]; nested: IOException[Bad Base64 input character decimal 123 in array position 0]; ","status":400}
2 个回复
kennywu76 - Wood
赞同来自: sonic0214
失败原因如下:
ES 1.7的scroll id直接写在request body里的:
从2.0以后,scroll ID放在了json里面:
从文档看2.x也兼容1.7的写法,这个阶段对应的logstash-es-input plugin在scroll操作上没有问题。
而看起来ES5.0以后不再向后兼容,scroll ID只能放在json body里。从而Logstash产生兼容性问题,并且在5.3.2的release notes里提到了做一个修复, 改为从json body里读取scroll id。
https://www.elastic.co/guide/e ... ins_3
但这个修复没有做对于1.x版本的兼容,因此对1.x的集群做scroll会有问题。
规避的办法: 试一下使用logstash 5.2.x ,应该可以正常从1.7读取。
sonic0214
赞同来自: