如何在logstash(5.4.0)grok中捕获重复模式?

时间:2017-08-24 05:14:13

标签: logstash logstash-grok

如果有人可以帮我解决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"

这可能吗?

1 个答案:

答案 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地址,但应该可以满足您的需求