web-dev-qa-db-ja.com

一致しないLogstash grokフィルターの処理方法

Logstash Grokフィルターを使用するのに最適なアプローチは何かと思います。特定のログエントリ用のフィルタがいくつかありますが、すべてのエントリに適用されるわけではありません。適用されないものは、常に_grokparsefailureタグを生成します。たとえば、ログエントリごとに1つのgrokフィルターがあり、正常に機能します。次に、トレースバック付きのエラーメッセージ用の別のフィルターがあります。トレースバックフィルターは、トレースバックを持たないログエントリごとにgrokparsefailureをスローします。

Parsefailureタグを追加する代わりに、一致しない場合にルールを渡すようにしたいです。 parsefailureタグを使用して、特定のフィルターに単に一致しなかったものではなく、適切に解析されていないものを見つけます。たぶんそれは私を取得する命名法「解析失敗」です。私にとっては、フィルターに何か問題がある(たとえば、フォーマットが不適切である)ことを意味します。一致しなかったことではありません。

質問は、これをどのように処理すればよいですか?

  • ?を使用してフィルターパターンをオプションにします。

  • (ab)何も設定しないでtag_on_failureオプションを使用する[]

  • 「メッセージ内のトレースバックの場合」のようなものを使用してフィルターを条件付きにします

  • 私が検討していない他の何か?

前もって感謝します。

[〜#〜] edit [〜#〜]

フィルターの周りに条件を追加するパスを取りました:

    if [message] =~ /took\s\d+/ {
        grok {
            patterns_dir => "/etc/logstash/patterns"
            match => ["message", "took\s+(?<servicetime>[\d\.]+)"]
            add_tag => [ "stats", "servicetime" ]
        }
    }

それでもフィードバックに興味があります。ここで「ベストプラクティス」と見なされるものは何ですか?

49
Spanky

可能であれば、使用しているものと同じように 条件付きラッパー を使用します。回答として自由に投稿してください!

アプリケーションがいくつかの異なる行形式のみを生成する場合、 grok filter で複数の一致パターンを使用できます。デフォルトでは、フィルターは最初に成功した一致まで処理します。

grok {
    patterns_dir => "./patterns"
    match => {
        "message" => [ 
              "%{BASE_PATTERN} %{EXTRA_PATTERN}",
              "%{BASE_PATTERN}",
              "%{SOME_OTHER_PATTERN}"
        ]
    }
}

ロジックがそれほど単純でない場合(同じ条件を複数回チェックする必要があるかもしれません)、 grep filter はタグを追加するのに役立ちます。このようなもの:

grep {
    drop => false #grep normally drops non-matching events
    match => ["message", "/took\s\d+/"]
    add_tag => "has_traceback"
}


...

if "has_traceback" in [tags] {
    ...
}
36
rutter

次のように、grookスタンザにtag_on_failure => []を追加することもできます。

grok {
    match => ["context", "\"tags\":\[%{DATA:apptags}\]"]
    tag_on_failure => [ ]
}

grokは引き続き失敗しますが、タグ配列に追加せずに失敗します。

22
Gary Rogers

これが最も効率的な方法です。フィルターを無視する

filter {

        grok {
            match => [ "message", "something"]
    }

    if "_grokparsefailure" in [tags] {
            drop { }
        }
}
8
JAR

これもできます

remove_tag => ["_grokparsefailure"]

試合があるときはいつでも。

4
Tony Wong