0

Logstash 構成ファイルを作成しています。

私はグロクフィルターを持っています。grok フィルターでの一致が正確にどのように機能するかを知りたいです。

logstash 側で 1 つの例を参照したところ、次のことがわかりました。

Ex log:55.3.244.1 GET /index.html 15824 0.043
以下のフィルターで解析されます。

filter {
  grok {
    match => { "message" => "%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}" }
  }

これは、ログ行全体を順番に一致させようとしているということですか? ログの行が異なります。それらは常に適切な枠組みにあるとは限りません。
以下のようなものです:

 1. 11:10:15---somedata
 2. 11:10:20---source--destination-- somedata
 3. somedata

3 つのタイプの行すべてをキャプチャしたいのですが、別の一致フィルターを作成する必要がありますか? または、単一の一致で source、destination、somedata フィールドを個別にキャプチャしても問題ありませんか?

これに関する情報を求めています。

はい、私は正規表現と grok パターンの基本を理解しています。

line 1: timestamp source destination a=0,b=1,c=3,d=4
line 2: timestamp a=1,e=5, b=1
line 3: g=0

ログ ファイルにこれらの 3 行があり、b と g の値を持つ行をキャプチャしたいとします。私のマッチブロックはどのように見えますか?

match => message ["b=":variable_b,"g=":variable_g]

これは b と g ですべての行をキャプチャしますか?? b の場合、1 行と 2 行をキャプチャする必要があります。gの場合、3をキャプチャする必要があります。したがって、出力には3行すべてが含まれているはずです?? これはどのように機能しますか、それとも grokparse エラーをスローしますか??

4

1 に答える 1

1

grok フィルターは、match ブロック内のパターンで機能します。これは正規表現として機能します (定義については、こちらを参照してください)。各パターンは、次の 2 つの部分で構成されます%{SYNTAX:SEMANTIC}
パターンから作成された正規表現が行全体に一致する場合、 からの値SYNTAXが name のフィールドとして追加されますSEMANTIC
詳細については、ドキュメントを参照してください。

フィルターには複数の grok パターンを含めることができます。

grok {
    match => {
        "message" => [
            "%{TIME}--%{DATA:source}--%{DATA:destination}--%{DATA:somedata}",
            "%{TIME:timestamp}--%{GREEDYDATA:somedata}",
            "%{GREEDYDATA:somedata}"
        ]
    }
}

また、Chro のコメントから: デフォルトでは、Grok フィルターは提供された順序でパターンを照合しようとします。したがって、その 3 番目のもの (GREEDYDATA のもの) を最初に配置すると、単純に一致してフィルターを離れます。これを false に設定することで、break_on_match 設定を使用して複数のパターンに一致させることができます (デフォルトでは true)。


あなたのアップデートで:

あなたの場合、これらの行がある場合:

timestamp source destination a=0,b=1,c=3,d=4
timestamp a=1,e=5, b=1
g=0

bとの値だけを抽出したいg場合は、複数のパターンを使用する必要があります。1 つはb値を取得するため、もう 1 つは `g 値 を取得するためです。

match => message [
    "b=%{NUMBER:b}",
    "g=%{NUMBER:g}"
]

Logstash はログを 1 行ずつ処理し、その行で実行されたプロセスの結果が出力されます。grok フィルターは、パターンを使用して行を解析し、解析が成功した場合にフィールドを追加しようとします。線をキャプチャしません。

于 2016-07-12T12:10:15.213 に答える