web-dev-qa-db-ja.com

Logstashのイベントメッセージに応じてフィールドを追加しても機能しない

ELKをインストールしてマシンで作業していますが、イベントメッセージに応じて、より複雑なフィルタリングとフィールド追加を実行したいと思います。

具体的には、メッセージパターンに応じて「id_error」と「descripcio」を設定したいと思います。

「logstash.conf」ファイルで多くのコードの組み合わせを試しましたが、期待どおりの動作を得ることができません。

誰かが私が間違っていること、私がしなければならないこと、またはこれが不可能かどうかを教えてもらえますか?前もって感謝します。

これは私の「logstash.conf」ファイルであり、最後に行ったテストで、Kibanaでイベントがキャプチャされませんでした。

input { 
    file {
        path => "C:\xxx.log"
    }
}

filter {
    grok {
        patterns_dir => "C:\elk\patterns"
        match => [ "message", "%{ERROR2:error2}" ]
        add_field => [ "id_error", "2" ]
        add_field => [ "descripcio", "error2!!!" ]
    }
    grok {
        patterns_dir => "C:\elk\patterns"
        match => [ "message", "%{ERROR1:error1}" ]
        add_field => [ "id_error", "1" ]
        add_field => [ "descripcio", "error1!!!" ]
    }
    if ("_grokparsefailure" in [tags]) { drop {} }
}

output {
  elasticsearch {
    Host => "localhost"
    protocol => "http"
    index => "xxx-%{+YYYY.MM.dd}"
  }
}

また、次のコードを試してみたところ、一致した各イベントで、フィールド「id_error」と「descripcio」の両方の値がそれぞれ「[1,2]」と「[error1 !!!、error2 !!!]」になりました。

「break_on_match」はデフォルトで「true」に設定されているため、matching句の背後にあるフィールドのみを取得することを期待していますが、これは発生しません。

input { 
  file {
    path => "C:\xxx.log"
  }
}

filter {
  grok {
    patterns_dir => "C:\elk\patterns"
    match => [ "message", "%{ERROR1:error1}" ]
    add_field => [ "id_error", "1" ]
    add_field => [ "descripcio", "error1!!!" ]
    match => [ "message", "%{ERROR2:error2}" ]
    add_field => [ "id_error", "2" ]
    add_field => [ "descripcio", "error2!!!" ]
  }
  if ("_grokparsefailure" in [tags]) { drop {} }
}

output {
  elasticsearch {
    Host => "localhost"
    protocol => "http"
    index => "xxx-%{+YYYY.MM.dd}"
  }
}
10
Natsen

私は問題を解決しました。 「logstash.conf」の次のコードで期待どおりの結果が得られます。

input { 
  file {
    path => "C:\xxx.log"
  }
}

filter {
  grok {
    patterns_dir => "C:\elk\patterns"
    match => [ "message", "%{ERROR1:error1}" ]
    match => [ "message", "%{ERROR2:error2}" ]
  }
  if [message] =~ /error1_regex/ {
    grok {
        patterns_dir => "C:\elk\patterns"
        match => [ "message", "%{ERROR1:error1}" ]
    }
    mutate {
        add_field => [ "id_error", "1" ]
        add_field => [ "descripcio", "Error1!" ]
        remove_field => [ "message" ]
        remove_field => [ "error1" ]
    }
  }
  else if [message] =~ /error2_regex/ {
    grok {
        patterns_dir => "C:\elk\patterns"
        match => [ "message", "%{ERROR2:error2}" ]
    }
    mutate {
        add_field => [ "id_error", "2" ]
        add_field => [ "descripcio", "Error2!" ]
        remove_field => [ "message" ]
        remove_field => [ "error2" ]
    }
  }
  if ("_grokparsefailure" in [tags]) { drop {} }
}

output {
  elasticsearch {
    Host => "localhost"
    protocol => "http"
    index => "xxx-%{+YYYY.MM.dd}"
  }
}
4
Natsen