我想有必要有办法做到这一点,但我无法从我能找到的文档中找出方法来做到这一点
我有一个模式文件来识别请求的类型:
FOO .*foo.* #request type foo
BAR .*bar.* #request type bar
我想从看起来像的东西中获取请求的类型 http://something.com/foo/aaa
我的logstash过滤器包含以下内容:
match => { "request" => [ "%{FOO:req_type}", "%{BAR:req_type}" ] }
我想要" foo"被分配到" req_type"相反,我得到了整个请求。我不确定如何获得我需要的部分
非常感谢您的帮助
答案 0 :(得分:1)
您不需要为此定义自定义grok模式,但您可以利用现有的URI
模式,然后在URIPATH
上拆分提取的/
并分配第一个路径组件到req_type
。它是这样的:
filter {
grok {
match => { "message" => "%{URI}" }
named_captures_only => false
}
mutate {
split => { "URIPATH" => "/" }
add_field => {"req_type" => "%{URIPATH[1]}" }
}
}
您的活动将与此类似(请注意底部的req_type
字段):
{
"message" => "http://something.com/foo/aaa",
"@version" => "1",
"@timestamp" => "2016-06-03T04:45:25.731Z",
"host" => "iMac.local",
"URI" => "http://something.com/foo/aaa",
"URIPROTO" => "http",
"URIHOST" => "something.com",
"IPORHOST" => "something.com",
"HOSTNAME" => "something.com",
"URIPATHPARAM" => "/foo/aaa",
"URIPATH" => [
[0] "",
[1] "foo",
[2] "aaa"
],
"req_type" => "foo"
}
请注意,您可以使用remove_field
删除任何不必要的内容。