あなたが通常行うことは、一致する変数に名前を付けることです。そのための構文は次のようになります。
(あなたの例を取る):
grok {
patterns_dir => ["/location/of/patterns"]
match =>
{
"request" => [ "%{A:A}", "%{B:NameOfB}", "%{C:SomeOtherName}",]
}
}
したがって、あなたのGROKの試合は今、次のような名前になります
A:
B:NameOfB
C:SomeOtherName
あなたのケースでは、それらのパターンの後にstの名前。それはうまくいくはずです。
また、(私はgrokデバッガでテストしたところですが)マッチしたパターンに名前をつけないと、パターンの名前がデフォルトになります。これを打ち負かすと、パターンを再利用すると結果は値の配列になります。
これは私が実行されたテストです:
入力:
Caused by: com.my.application.IOException: null Caused by: com.my.application.IOException: null asd asd
GROK:
(.*?)Caused by:%{GREEDYDATA}:%{GREEDYDATA}
出力:
{
"GREEDYDATA": [
[
" com.my.application.IOException: null Caused by: com.my.application.IOException",
" null asd asd"
]
]
}
あなたの問題を解決ホープ
EDITアルトゥール:ここではOPの他の質問に基づいて
は動的にその問題を解決するための私のアプローチです。
あなたはまだ名前に一致する必要があります。あなたのマッチに名前を付ける方法に関する共通の接頭辞を決めてください。 2人工試合、prefix_patterna
とprefix_patternb
があるか
{"a" : "b", "prefix_patterna" : "", "prefix_patternb" : "bla"}
{"a" : "b", "prefix_patterna" : "sd", "prefix_patternb" : ""}
注:私はこれを簡単にするために2つのJSON文字列に私の例をベースにします。だから、私はプレフィックス "プレフィックス"を決めました。そして、それを使って検査するイベントフィールドを特定しました。 (空のイベントをドロップすることもできます)。
ruby {
code => "
toAdd = nil;
event.to_hash.each { |k,v|
if k.start_with?('prefix_') && v.to_s != ''
toAdd = k
end
}
if toAdd.to_s != ''
event['test'] = toAdd
end
"
}
すべてこのコードは、接頭辞のイベントキーをチェックし、かどうかを確認するためにあるん
はその後、私のフィルタでは、私は私のパターンにマッチしたものを見つけるために、すべてのイベントを反復処理するためにルビーを使用しますそのフィールドの値は空またはnilです。値を持つフィールドが見つかると、それを "test"という新しいイベントフィールドに書き込みます。第二の試験は「prefix_patternb」を書き込んながら最初のテストは「prefix_patterna」を書き込む方法
Settings: Default pipeline workers: 8
Pipeline main started
{"a" : "b", "prefix_patterna" : "sd", "prefix_patternb" : ""}
{
"message" => "{\"a\" : \"b\", \"prefix_patterna\" : \"sd\", \"prefix_patternb\" : \"\"}",
"@version" => "1",
"@timestamp" => "2016-09-15T09:48:29.418Z",
"host" => "pandaadb",
"a" => "b",
"prefix_patterna" => "sd",
"prefix_patternb" => "",
"test" => "prefix_patterna"
}
{"a" : "b", "prefix_patterna" : "", "prefix_patternb" : "bla"}
{
"message" => "{\"a\" : \"b\", \"prefix_patterna\" : \"\", \"prefix_patternb\" : \"bla\"}",
"@version" => "1",
"@timestamp" => "2016-09-15T09:48:36.359Z",
"host" => "pandaadb",
"a" => "b",
"prefix_patterna" => "",
"prefix_patternb" => "bla",
"test" => "prefix_patternb"
}
注:ここでは
は私のテストです。
私は次のように複数のGROKフィルタを有することにより、あなたは、試合をタグ(またはフィールドを追加)することができます
アルトゥル
groqごとに1つのパターンがあり、add_tagを使用します。 –