2

[url][queryString] について確実なのは、404 で始まることだけです。またはキーが長いこと。そのようなキーを削除する必要があります。以下のルビーコードを使用すると、リンクされたハッシュマップを文字列例外に変換できません。

input {
    file {
        # Wildcards work, here :)
        path => ["C:\Users\ppurush\Desktop\test\*.log"]
        start_position => "beginning"
    }
}

filter {
    ruby {
        code=>
        "
        require json
        my_hash = JSON.parse([url][queryString])
        my_hash.delete_if { |key,value| key.to_s.match(/^404;/) }
        "
    }
}

output {
    stdout{}
    elasticsearch {
       host => localhost
    }
}
4

1 に答える 1

0

Ruby コードが無効であるため、Ruby 例外が発生します。代わりにこれを試してください:

filter {
    ruby {
        init => "require 'json'"
        code => "
            my_hash = JSON.parse( event['url']['queryString'] )
            my_hash.delete_if { |key,value| key.to_s.match(/^404;/) }
        "
    }
}

これは、イベント'url' => 'queryString'に有効な json を含むフィールドがある場合に機能します。これを実現するためのある種のフィルターが既にある場合があります (例: grok )。また、logstash の組み込みjson フィルターの使用を検討し、ドロップして特定のイベントを削除することもできます。


編集:

入力がプレーンなjsonであるとします(これを整理する必要がありました):

{"id":"val1","host":"val2","app":"val3","@timestamp":"2015-08-04T19:00:03.642932‌​2Z","@timestampEnd":"2015-08-04T19:00:03.6429322Z","vid":"val4","vidNew":"val5","se‌​ssionId":"val6","url":{"rawUrl":"val7","path":"val8","queryString":{"404;dfdgfdgf‌​ghfhjghhhhhhhhhhhhh":""}},"net":{"method":"GET","status":"200","size":"0","timeTa‌​kenMillis":"0"},"context":{"SearchType":""}}

codec => "json"ファイル入力で使用できます。

input {
    file {
        path => ["C:\Users\ppurush\Desktop\test\*.log"]
        start_position => "beginning"
        codec => "json"
    }
}

次のフィールドが表示されます。

"url" => {
         "rawUrl" => "val7",
           "path" => "val8",
    "queryString" => {
        "404;dfdgfdgf‌​ghfhjghhhhhhhhhhhhh" => ""
    }
}

変数404;dfdgfdgf‌​ghfhjghhhhhhhhhhhhhも同様です。それを確認してイベントを削除するには、次のようにします。

if [url][queryString][404;dfdgfdgf‌​ghfhjghhhhhhhhhhhhh] {
        drop {}
    }
于 2015-09-02T15:24:11.067 に答える