2

关于 [url][queryString] 唯一可以确定的是它以 404 开头;或者钥匙很长。我需要删除这些钥匙。如果我使用下面的 ruby​​ 代码,它会给出无法将链接的哈希图转换为字符串异常。

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 过滤器,并且可能会通过drop删除某些事件。


编辑:

假设您的输入是纯 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 回答