Logstash/Kibana GeoIP 不工作

标签 logstash kibana geoip

我正在尝试使用 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
  ]
}

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

最佳答案

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

Starting with version 1.3.0 of Logstash, a [geoip][location] field is created if the GeoIP lookup returns a latitude and longitude.

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

关于Logstash/Kibana GeoIP 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33673510/

相关文章:

php - geoip zip 查询

elasticsearch - 如果字段的键长于 Logstash 中的 x 字符,则删除字段?

json - 在logstash中解析嵌套的json

elasticsearch - 如何在 Kibana elasticSearch 中搜索 Json 消息

elasticsearch - 使用分层路径分析的值的查询在Kibana和ElasticSearch中是否正常工作?

ruby-on-rails-3 - 如何让 Maxmind 的 Geoip 数据库与 Postgres + Heroku 一起工作

elasticsearch - 为什么ElasticSearch有时不显示Logstash发送的最新日志?

elasticsearch - Elasticsearch映射模板

elasticsearch - 无法访问 Kibana 公网 IP 站点