2017-10-13 2 views
0

Ich übe mit Logstash und ich kann die Quelle dieses Fehlers nicht verstehen. Ich möchte einen Index ändern, indem ich ein Feld entferne und eines umbenenne. Ich bin auf Logstash 5.6.2Aktualisierung eines Index mit Logstash fehlgeschlagen, wahrscheinlich Fehler?

Dies ist ein Beispiel für meine Einträge:

{ 
    "_index": "test-shakespeare-italian", 
    "_type": "logs", 
    "_id": "AV8QsD5pzoUbREG_8icr", 
    "_score": 1, 
    "_source": { 
     "nome_opera": "Henry IV", 
     "battuta_numero": "3.2.9", 
     "battuta": "Make me believe that thou art only markd", 
     "@timestamp": "2017-10-12T13:05:06.519Z", 
     "id_battuta": 1841, 
     "dialogo_numero": 1, 
     "@version": "1", 
     "interlocutore": "KING HENRY IV" 
    } 
    } 

Diese meine Pipeline ist:

# this pipeline updates an existing index by 
# changing name of field "nome_opera" in "opera" 
# dropping field "dialogo numero" 
input { 
    elasticsearch { 
    hosts => "localhost" 
    index => "test-shakespeare-italian" 
    query => '{"query": {"match_all": {}}}' 
    } 
} 
filter { 
    mutate { 
    rename => { "nome_opera" => "opera"} 
    remove_field => "dialogo_numero" 
    } 
} 
output { 
    elasticsearch { 
    index => "test-shakespeare-italian" 
    action => "update" 
    document_id => "OOW-j2DeSCmnsVWVsywOVQ" 
    hosts => "localhost:9200" 
    version => "1" 
    } 
    #stdout { codec => rubydebug } 
} 

Zuerst war ich das Versionsfeld nicht verwenden, aber Dies erzeugte den folgenden Fehler:

[2017-10-13T11:29:25,464][WARN ][logstash.outputs.elasticsearch] Failed action. {:status=>409, :action=>["update", {:_id=>"OOW-j2DeSCmnsVWVsywOVQ", :_index=>"test-shakespeare-italian", :_type=>"logs", :_routing=>nil, :_retry_on_conflict=>1}, 2017-10-12T13:05:08.907Z %{host} %{message}], :response=>{"update"=>{"_index"=>"test-shakespeare-italian", "_type"=>"logs", "_id"=>"OOW-j2DeSCmnsVWVsywOVQ", "status"=>409, "error"=>{"type"=>"version_conflict_engine_exception", "reason"=>"[logs][OOW-j2DeSCmnsVWVsywOVQ]: version conflict, current version [17901] is different than the one provided [17900]", "index_uuid"=>"OOW-j2DeSCmnsVWVsywOVQ", "shard"=>"3", "index"=>"test-shakespeare-italian"}}}} 

Dann fügte ich das Versionsfeld aber noch hinzu die Pipeline schlägt mit dem folgenden Fehler:

[2017-10-13T11:38:39,467][ERROR][logstash.outputs.elasticsearch] Encountered an unexpected error submitting a bulk request! Will retry. {:error_message=>"undefined method `sanitized' for \"http://localhost:9200/_bulk\":String", :class=>"NoMethodError", :backtrace=>["/usr/local/Cellar/logstash/5.6.2/libexec/vendor/bundle/jruby/1.9/gems/logstash-output-elasticsearch-7.4.0-java/lib/logstash/outputs/elasticsearch/common.rb:249:in `safe_bulk'", "/usr/local/Cellar/logstash/5.6.2/libexec/vendor/bundle/jruby/1.9/gems/logstash-output-elasticsearch-7.4.0-java/lib/logstash/outputs/elasticsearch/common.rb:119:in `submit'", "/usr/local/Cellar/logstash/5.6.2/libexec/vendor/bundle/jruby/1.9/gems/logstash-output-elasticsearch-7.4.0-java/lib/logstash/outputs/elasticsearch/common.rb:87:in `retrying_submit'", "/usr/local/Cellar/logstash/5.6.2/libexec/vendor/bundle/jruby/1.9/gems/logstash-output-elasticsearch-7.4.0-java/lib/logstash/outputs/elasticsearch/common.rb:38:in `multi_receive'", "/usr/local/Cellar/logstash/5.6.2/libexec/logstash-core/lib/logstash/output_delegator_strategies/shared.rb:13:in `multi_receive'", "/usr/local/Cellar/logstash/5.6.2/libexec/logstash-core/lib/logstash/output_delegator.rb:49:in `multi_receive'", "/usr/local/Cellar/logstash/5.6.2/libexec/logstash-core/lib/logstash/pipeline.rb:436:in `output_batch'", "org/jruby/RubyHash.java:1342:in `each'", "/usr/local/Cellar/logstash/5.6.2/libexec/logstash-core/lib/logstash/pipeline.rb:435:in `output_batch'", "/usr/local/Cellar/logstash/5.6.2/libexec/logstash-core/lib/logstash/pipeline.rb:381:in `worker_loop'", "/usr/local/Cellar/logstash/5.6.2/libexec/logstash-core/lib/logstash/pipeline.rb:342:in `start_workers'"]} 
  • Ich bin sicher, dass die document_id korrekt ist.
  • Die Pipeline funktioniert perfekt, wenn man statt den Index zu aktualisieren ich ein neues
  • --config.test_and_exit gibt

Online fand ich dieses https://discuss.elastic.co/t/logstash-encountered-an-unexpected-error-submitting-a-bulk-request-undefined-method-sanitized/103360/2

und dieses https://github.com/logstash-plugins/logstash-output-elasticsearch/issues/612

OK erstellen

Was mich dazu bringt zu denken, dass dies ein Fehler ist, nicht meine Schuld. Leider gibt es in diesen Links keine echte Lösung, muss ich zu einer älteren Version von logstash zurückkehren? Irgendwelche anderen Ideen?

Antwort

0

Funktioniert es, wenn Sie das Endergebnis über stdout nehmen und es über Bulk-API anwenden?

Ich denke es ist ein Problem mit Ihrem letzten JSON nach Filterprozessor

+0

sein muss, Wie kann ich den gleichen Index mit Bulk-apis aktualisieren? BTW, ich habe versucht, nach anderen Möglichkeiten zu suchen, und das habe ich in SECONDS mit Massen-APIs und dem Skriptfeld erreicht. Wenn das Aktualisieren eines Indexes mit logstash so kompliziert ist, würde ich wahrscheinlich jedes Mal ein neues erstellen. Ich plane nicht, meine Daten so oft zu ändern. Ist es eine gute Idee? – user3753342

Verwandte Themen