我正在尝试使用ELK堆栈创建GeoIP数据,这可以在Kibana中显示。
我最近在Ubuntu Server 14.04的虚拟实例上安装了ELK堆栈(Elastic Search,Logstash和Kibana)。我正在使用Bro捕获日志。
除了GeoIP(最有趣的功能之一!)之外,捕获日志,解析它们以及在Kibana中查看它们所做的一切都很有效。
我的logstash配置文件的GeoIP部分如下所示;
geoip {
add_tag => [ "geoip" ]
database => "/etc/logstash/GeoLiteCity.dat"
source => "id.orig_h"
target => "geoip"
add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}"]
add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}" ]
}
mutate {
convert => [ "[geoip][coordinates]", "float" ]
}
我从the following guide to setup GeoIP with Kibana.获得了过滤器的那部分我还看到过滤器在其他一些地方使用过。 我试图简化过滤器(只是源,目标,数据库),但没有运气。
当我对索引执行curl请求时,尤其是使用add_tag [" geoip"]时,它会返回空白数据;
"geoip" : {
"dynamic" : "true",
"properties" : {
"location" : {
"type" : "geo_point"
}
}
最后,这是我从Kibana直接采用JSON格式的一些清理数据;
{
"_index": "logstash-2015.11.12",
"_type": "bro-conn_log",
"_id": "*****",
"_score": null,
"_source": {
"message": [
"*****"
],
"@version": "1",
"@timestamp": "2015-11-12T13:43:16.205Z",
"host": "elk",
"path": "/nsm/bro/logs/current/conn.log",
"type": "bro-conn_log",
"ts": "*****",
"uid": "*****",
"id.orig_h": "*****",
"id.orig_p": *****,
"id.resp_h": "*****",
"id.resp_p": *****,
"proto": "*****",
"service": "*****",
"duration": *****,
"orig_bytes": *****,
"resp_bytes": *****,
"conn_state": "*****",
"local_orig": "*****",
"missed_bytes": *****,
"history": "*****",
"orig_pkts": *****,
"orig_ip_bytes": *****,
"resp_pkts": *****,
"resp_ip_bytes": *****,
"tunnel_parents": "*****",
"column21": "(empty)",
"conn_state_full": "*****"
},
"fields": {
"@timestamp": [
1447335796205
]
},
"sort": [
1447335796205
]
}
总结一下:我试图让GeoIP数据与ELK堆栈一起工作。尽管下面的指南描述了如何做到这一点,但GeoIP字段不会显示在Kibana中。任何建议都会非常感激。
答案 0 :(得分:3)
非常愚蠢的解决方案。我所看到的IP地址都是内部的。我假设(错误地)它将为任何不可解析的IP地址生成空的GeoIP数据。但是,正如geoIP文档所述:
从Logstash 1.3.0版开始,如果GeoIP查找返回纬度和经度,则会创建[geoip] [location]字段。
因此,如果没有Long和Lat,则永远不会创建GeoIP字段。这已经通过将机器移动到更开放的网络并立即看到具有上述相同过滤器的GeoIP标签得到了证实。