如果有人能帮助我解决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"
这可能吗?
您可以使用 ruby 过滤器进行更高级的解析:
filter {
ruby {
code => "event.set('ips') = event.get('message').scan(/d{1,3}.d{1,3}.d{1,3}.d{1,3}/)"
}
}
正则表达式不是 100% 正确的匹配 IP 地址,但应该适合您的需求