Logstash/Kibana GeoIP 不工作

Posted

技术标签:

【中文标题】Logstash/Kibana GeoIP 不工作【英文标题】:Logstash/Kibana GeoIP not working 【发布时间】:2015-11-12 14:15:22 【问题描述】:

我正在尝试使用可以在 Kibana 中可视化的 ELK 堆栈创建 GeoIP 数据。

我最近在 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
  ]

总结一下:我正在尝试使用 ELK 堆栈获取 GeoIP 数据。尽管遵循指南描述了如何做到这一点,但 GeoIP 字段不会在 Kibana 中显示。任何建议将不胜感激。

【问题讨论】:

【参考方案1】:

非常愚蠢的解决方案。我正在查看的 IP 地址都是内部的。我假设(错误地)它只会为任何不可解析的 IP 地址生成空的 GeoIP 数据。但是,正如 geoIP 文档所述:

从 Logstash 1.3.0 版开始,如果 GeoIP 查找返回纬度和经度,则会创建一个 [geoip][location] 字段。

因此,如果没有 Long 和 Lat,则永远不会创建 GeoIP 字段。这已通过将机器移至更开放的网络并立即看到具有上述相同过滤器的 GeoIP 标签来确认。

【讨论】:

请注意,如果需要,您还可以构建本地 IP 地址的自定义 GeoIP 数据库:coolacid.net/ossim-logstash/…

以上是关于Logstash/Kibana GeoIP 不工作的主要内容,如果未能解决你的问题,请参考以下文章

logstash - Kibana 中的 geoip 无法使用 IP 地址显示任何信息

ELK技术栈ElasticSearch,Logstash,Kibana

ELK之生产日志收集构架(filebeat-logstash-redis-logstash-elasticsearch-kibana)

CentOS7??????Elasticsearch+ Logstash+kibana??????????????????????????????

elasticsearch+logstash+kibana部署

用ElasticSearch,LogStash,Kibana搭建实时日志收集系统