无法从Netflow输入获取logstash geoip定位

时间:2014-10-13 18:45:41

标签: logstash geoip

我正在尝试使用Logstash从Netflow源解析和地理定位IP地址,它可以将数据导入Elasticsearch,但它不会放入geoip信息。这是我在logstash中使用的配置文件

input {
        udp {
                host => localhost
                port => 5555
                codec => netflow
        }
}

filter {
        geoip {
                target => "geoip"
                source => "ipv4_dst_addr"
                add_tag => ["geoip"]
                add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}"$
                add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}" $
        }
}

output {
        stdout { }
        elasticsearch { host => "127.0.0.1" }
}

可能有用的更多信息,使用Logstash 1.4.2和Elasticsearch 1.3.4。

2 个答案:

答案 0 :(得分:0)

运气好吗?

如果没有,请注意您需要使用mutate将坐标转换为float。

但是,Logstash 1.3及更高版本中的geoip过滤器会直接添加位置字段,因此您不必使用add_field,甚至不必使用转换器。如果您尝试这两种解决方案,请告诉我它是怎么回事。谢谢。

附注:与Elasticsearch的Logstash 1.4.2一起使用的推荐版本是1.1.1

答案 1 :(得分:0)

我只花了一些时间深入研究这个问题,最终成为Netflow编解码器代码中的一个错误(特别是IP4Addr中的netflow/util.rb类)。

您应该能够使用mutate过滤器解决此问题,例如:

filter {
    mutate {
        convert => { 
            "[netflow][ipv4_src_addr]" => "string"
            "[netflow][ipv4_dst_addr]" => "string"
        }
    }
    geoip {
        source => "[netflow][ipv4_src_addr]"
        target => "src_geoip"
    }
    geoip {
        source => "[netflow][ipv4_dst_addr]"
        target => "dst_geoip"
    }
}

我已提交pull request to fix this properly,但暂时尝试配置。

相关问题