如果有人可以帮我解决logstash grok,我将不胜感激。
给出如下所示的日志,
IN 192.168.11.2 IN 192.168.11.3
我的目标是使用grok将ip地址放入数组。 ip列表是动态的,可以扩展超过2个。
e.g
tmp = [
"192.168.11.2", "192.168.11.3"
]
但是,如果我使用类似下面的过滤器,它最终会出现在单个字段中。
filter {
grok {
match => { "message" => "(?<tmp>(IN %{IPV4}(\s)?)*)" }
}
}
结果,
"path" => "/tmp/sample.csv",
"@timestamp" => 2017-08-24T05:00:08.093Z,
"tmp" => "IN 192.168.11.2 IN 192.168.11.3",
"@version" => "1",
"host" => "host.ywlocal.net",
"message" => "IN 192.168.11.2 IN 192.168.11.3"
这可能吗?
答案 0 :(得分:2)
您可以使用ruby过滤器进行更高级的解析:
filter {
ruby {
code => "event.set('ips') = event.get('message').scan(/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\/)"
}
}
Regexp不是100%正确匹配IP地址,但应该可以满足您的需求