7

document_idを使用して重複を削除するいくつかのlogstash入力があります。ただし、ほとんどの入力にはdocument_id. 以下は実際のdocument_idスルーを調べますが、それが存在しない場合は、文字通りとして受け入れられ%{document_id}ます。つまり、ほとんどのドキュメントは互いに重複していると見なされます。出力ブロックは次のようになります。

output {
        elasticsearch_http {
            host => "127.0.0.1"
            document_id => "%{document_id}"
        }
}

出力で条件を使用できるかもしれないと思いました。失敗し、コードの下にエラーが表示されます。

output {
        elasticsearch_http {
            host => "127.0.0.1"
            if document_id {
                document_id => "%{document_id}"
            } 
        }
}

Error: Expected one of #, => at line 101, column 8 (byte 3103) after output {
        elasticsearch_http {
    host => "127.0.0.1"
    if 

いくつかの「if」ステートメントを試しましたが、すべて失敗しました。そのため、問題はそのブロックに何らかの条件があると思います。私が試した代替手段は次のとおりです。

if document_id <> "" {
if [document_id] <> "" {
if [document_id] {
if "hello" <> "" {
4

3 に答える 3

9

条件付きのアイデアに近いですが、プラグイン ブロック内に配置することはできません。代わりにこれを行います:

output {
  if [document_id] {
    elasticsearch_http {
      host => "127.0.0.1"
      document_id => "%{document_id}"
    } 
  } else {
    elasticsearch_http {
      host => "127.0.0.1"
    } 
  }
}

(ただし、uuid フィルターを使用するという他の回答の 1 つの提案も適切です。)

于 2015-05-14T15:06:02.203 に答える