2017-10-13 6 views
0

Je m'entraîne avec Logstash et je n'arrive pas à comprendre la source de cette erreur. Je souhaite modifier un index en supprimant un champ et en en renommant un. Je suis sur Logstash 5.6.2La mise à jour d'un index avec logstash échoue, probablement un bug?

Ceci est un exemple de mes entrées:

{ 
    "_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" 
    } 
    } 

Ceci est mon pipeline:

# 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 } 
} 

D'abord, je n'utilisait pas le champ de version, mais cela a produit l'erreur suivante:

[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"}}}} 

Puis j'ai ajouté le champ de version mais toujours le pipeline échoue avec l'erreur suivante:

[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'"]} 
  • Je suis sûr que le document_id est correct.
  • Le pipeline fonctionne parfaitement si au lieu de mettre à jour l'index je crée une nouvelle
  • --config.test_and_exit donne OK

Je en ligne trouvé ce https://discuss.elastic.co/t/logstash-encountered-an-unexpected-error-submitting-a-bulk-request-undefined-method-sanitized/103360/2

et ce https://github.com/logstash-plugins/logstash-output-elasticsearch/issues/612

Ce qui m'amène à penser que c'est un bug, pas de ma faute. Malheureusement, aucune solution réelle n'est fournie dans ces liens, dois-je revenir à une ancienne version de logstash? D'autres idées?

Répondre

0

Est-ce que cela fonctionne si vous prenez le résultat final via stdout et que vous l'appliquez via une API en masse?

Je pense qu'il doit y avoir un problème avec votre JSON final après le processeur de filtre

+0

Comment puis-je mettre à jour le même index avec des API en bloc? BTW, j'ai essayé de chercher d'autres moyens et j'ai accompli cela dans SECONDS avec des API de masse et le champ de script. Si la mise à jour d'un index avec logstash est si compliquée, j'imagine que j'irais simplement en créer un nouveau à chaque fois. Je ne prévois pas de modifier mes données aussi souvent. Est-ce une bonne idée? – user3753342