你得到一个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.6429322Z","@timestampEnd":"2015-08-04T19:00:03.6429322Z","vid":"val4","vidNew":"val5","sessionId":"val6","url":{"rawUrl":"val7","path":"val8","queryString":{"404;dfdgfdgfghfhjghhhhhhhhhhhhh":""}},"net":{"method":"GET","status":"200","size":"0","timeTakenMillis":"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;dfdgfdgfghfhjghhhhhhhhhhhhh" => ""
}
}
404;dfdgfdgfghfhjghhhhhhhhhhhhh
变量也是如此。要检查它并删除事件,您可以执行以下操作:
if [url][queryString][404;dfdgfdgfghfhjghhhhhhhhhhhhh] {
drop {}
}