我正在尝试使用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。
答案 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,但暂时尝试配置。