2016-07-07 4 views
1

logstashelasticsearch outputを使用すると、より新しいログメッセージの場合は@timestampのみを更新できますか?Logstash - > Elasticsearch:新しい文書の場合は@timestampを更新し、古い場合は破棄します。

ドキュメント全体のインデックスを再作成したり、同じログメッセージのインデックスを2度作成したりすることは望ましくありません。

さらに、@timestampが古い場合は、現在のバージョンを更新/置き換えてはいけません。

現在は、私はこれをやっている:

filter { 
    if ("cloned" in [tags]) { 
     fingerprint { 
      add_tag => [ "lastlogin" ] 
      key  => "lastlogin" 
      method => "SHA1" 
     } 
    } 
} 

output { 
    if ("cloned" in [tags]) { 
     elasticsearch { 
      action    => "update" 
      doc_as_upsert  => true 
      document_id   => "%{fingerprint}" 
      index    => "lastlogin-%{+YYYY.MM}" 
      sniffing   => true 
      template_overwrite => true 
     } 
    } 
} 

それはHow to deduplicate documents while indexing into elasticsearch from logstashに似ていますが、私はいつもmessageフィールドを更新する必要はありません。 @timestampフィールドが最新の場合に限ります。

答えて

0

文書を更新する必要があるかどうかを判断できません。これは、Elasticsearchレベルで決定する必要があります。つまり、_update APIで試してテストする必要があります。

私はhttps://www.elastic.co/guide/en/elasticsearch/reference/current/docs-update.html#upsertsをお勧めします。つまり、ドキュメントが存在する場合、スクリプトが実行されます(必要に応じて、@timestampを確認できます)。そうでない場合は、upsertの内容が新しいドキュメントとみなされます。

関連する問題