2016-05-13 5 views
3

Logstashプラグインを使用してCouchDBの変更を検出し、Elasticsearchインデックスを適切に更新しようとしています。Logstash couchdb_changesがElasticsearchに文書削除を正しく伝播しない

ドキュメントの作成/更新はうまく動作しますが、何らかの理由で削除が機能しません。ここで

は私Logstash構成です:

input { 
    couchdb_changes { 
    host => "localhost" 
    db => "products" 
    sequence_path => ".couchdb_products_seq" 
    type => "product" 
    tags => ["product"] 
    keep_revision => true 
    } 
} 

output { 
    elasticsearch { 
    hosts => ["localhost:9200"] 
    index => "products" 
    # Pass the CouchDB document ID to Elastic, otherwise it is lost and Elastic generates a new one 
    document_id => "%{[@metadata][_id]}" 
    } 
    # Debug 
    stdout { 
    codec => rubydebug { 
     metadata => true 
    } 
    } 
} 

私はthis link渡って来なかったが、「プロトコル」パラメータは、もはやelasticsearch Logstashプラグインに存在する、と私はそのような巨大なバグが今で固定することが期待されます。私Logstashコンソールで

私は(布団から)CouchDBのドキュメントを削除するとき、私はこれを参照してください。代わりに、ID「15d6f519d6827a2f28de4df1d40082d5」との文書を削除するので

{ 
     "@version" => "1", 
    "@timestamp" => "2016-05-13T14:06:55.734Z", 
      "type" => "product", 
      "tags" => [ 
     [0] "product" 
    ], 
    "@metadata" => { 
      "_id" => "15d6f519d6827a2f28de4df1d40082d5", 
     "action" => "delete", 
      "seq" => 10020 
    } 
} 

だから、それはその内容を置き換えます。ここでは、文書「15d6f519d6827a2f28de4df1d40082d5は」Elasticsearchで、削除した後です:

curl -XGET 'localhost:9200/products/product/15d6f519d6827a2f28de4df1d40082d5?pretty' 
{ 
    "_index" : "products", 
    "_type" : "product", 
    "_id" : "15d6f519d6827a2f28de4df1d40082d5", 
    "_version" : 3, 
    "found" : true, 
    "_source" : { 
    "@version" : "1", 
    "@timestamp" : "2016-05-13T14:06:55.734Z", 
    "type" : "product", 
    "tags" : [ "product" ] 
    } 
} 

削除が動作しない理由の任意のアイデア?これはcouchdb_changesプラグインのバグですか? elasticsearchプラグイン?私は、問題を見つけたと思う Elasticsearch 2.3.2 Logstash 2.3.2 のApache CouchDBの1.6.1

答えて

4

は情報については、ここで私のアプリのバージョンです。メタデータからElasticsearchに「削除」を渡すために

action => "%{[@metadata][action]}" 

: は、私は手動でlogstash output.elasticsearch構成では、この行を追加する必要がありました。

upsertに別の問題がありますが、それはGitHub ticketに記録されています。

編集:theupsert問題を回避するには、私は実際にこれに私の設定を変更(主に、アクションが削除であるかどうかを格納するフィールドを追加します):

input { 
    couchdb_changes { 
    host => "localhost" 
    db => "products" 
    sequence_path => ".couchdb_products_seq" 
    type => "product" 
    tags => ["product"] 
    keep_revision => true 
    } 
} 

filter { 
    if [@metadata][action] == "delete" { 
     mutate { 
     add_field => { "elastic_action" => "delete" } 
     } 
    } else { 
     mutate { 
     add_field => { "elastic_action" => "index" } 
     } 
    } 
} 

output { 
    elasticsearch { 
    hosts => ["localhost:9200"] 
    index => "products" 
    document_id => "%{[@metadata][_id]}" 
    action => "%{elastic_action}" 
    } 
    # Debug 
    stdout { 
    codec => rubydebug { 
     metadata => true 
    } 
    } 
} 

私はLogstashの専門家の近くにどこにも午前/ Elasticsearch、これは今のところうまくいくようです。

関連する問題