Logstash - 如何在一条消息中使用多个 geoip 过滤器

Logstash - How to use multiple geoip filter in one message

我想包括两个要应用于一个 logstash 消息的 geoip 过滤器 - 比方说:一个带有 dst 字段(防火墙位置)和 src 字段(访问源)的防火墙消息。

日志条目可能如下所示:

<190>2015 Mar 23 02:21:30 fw1 <50000> Dropped Inbound packet (Stateless ICMP) Src:87.245.196.38 Dst:154.54.27.169 Type:11 Code:0 IPP:1 Rule:-1 Interface:WAN (Internet)

过滤器在logstash.conf中定义如下:

if [message] =~ "packet" {
        grok {
            match => [ 
                "message", "<%{POSINT:syslog_pri}>%{YEAR} %{SYSLOGTIMESTAMP:syslog_timestamp} %{DATA:device} <%{POSINT:status}> %{WORD:activity} %{DATA:inout} \(%{DATA:msg}\) Src:%{IPV4:src} SPort:%{INT:sport} Dst:%{IPV4:dst} DPort:%{INT:dport} IPP:%{INT:ipp} Rule:%{INT:rule} Interface:%{WORD:iface}",
                "message", "<%{POSINT:syslog_pri}>%{YEAR} %{SYSLOGTIMESTAMP:syslog_timestamp} %{DATA:device} <%{POSINT:status}> %{WORD:activity} %{DATA:inout} \(%{DATA:msg}\) Src:%{IPV4:src} Dst:%{IPV4:dst} Type:%{POSINT:type} Code:%{INT:code} IPP:%{INT:ipp} Rule:%{INT:rule} Interface:%{WORD:iface}"
            ]
        }
        geoip { source => "src" }
        geoip { source => "dst" }
}

消息解析良好(无 _grokparsefailure),但仅附加了一个 geoip 信息(最后一个 "dst")。

geoip filter's target option 设置为要为每个源字段存储 GeoIP 信息的字段。

filter {
    geoip {
      source => "src"
      target => "src_geoip"
    }
    geoip {
      source => "dst"
      target => "dst_geoip"
    }
}