Logstash配置文件错误(答案不起作用)

时间:2015-09-01 00:12:21

标签: elasticsearch logstash logstash-configuration

关于[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
    }
}

1 个答案:

答案 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 filterdrop来删除某些事件。

编辑:

假设您的输入是普通的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 {}
    }