关于[url] [queryString]唯一可以确定的是它以404开头;或者密钥很长。我需要删除这些密钥。 如果我使用下面的ruby代码,则表示无法将链接的hashmap转换为字符串异常。
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
}
}
答案 0 :(得分: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 filter和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 {}
}