【问题标题】:logstash - geoip in Kibana can not show any information using the IP addresseslogstash - Kibana 中的 geoip 无法使用 IP 地址显示任何信息
【发布时间】:2014-08-21 16:23:57
【问题描述】:

我想使用 ElasticSearch、Kibana 和 Logstash 在世界地图中显示访问我的应用的用户数量。

这是我的日志(Json 格式):

{
  "device": "",
  "public_ip": "70.90.17.210",
  "mac": "00:01:02:03:04:05",
  "ip": "192.16.1.10",
  "event": {
    "timestamp": "2014-08-15T00:00:00.000Z",
    "source": "system",
    "name": "status"
  },
  "status": {
    "channel": "channelname",
    "section": "pictures",
    "downlink": 1362930,
    "network": "Wi-Fi"
  }
}

这是我的配置文件:

input {
  file { 
    path => ["/mnt/logs/stb.events"]
    codec => "json" 
    type => "event" 
  }
}
filter {
    date    {
        match => [ "timestamp", "yyyy-MM-dd HH:mm:ss", "ISO8601" ]
    }
}

filter {
    mutate  {
        convert => [ "downlink", "integer" ]
    }
}
filter {
    geoip {
      add_tag => [ "geoip" ]
      database => "/opt/logstash/vendor/geoip/GeoLiteCity.dat" 
      source => "public_ip"
      target => "geoip"
      add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ]
      add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}" ]
          }
    mutate {
      convert => [ "[geoip][coordinates]", "float" ]
    }
}
output { 
  elasticsearch {
    host => localhost
  }
}

在 Kibana 的最后,我只看到一个空的 geoip 标签

谁能帮助我并指出我的错误在哪里?

【问题讨论】:

  • 你能显示 ruby​​debug 输出的输出吗? ` 输出 { elasticsearch { host => localhost } stdout { codec => ruby​​debug } } `
  • 感谢您的回答。您能否更详细地解释如何运行它,因为我对 Ruby 不太熟悉提前谢谢
  • 只需将您拥有的输出块替换为我之前评论中的输出块
  • 好的,我将它添加到我的logstash配置文件中,之后我重新启动了logstash(它运行正常),我需要寻找什么?提前谢谢你

标签: elasticsearch logstash geoip kibana


【解决方案1】:

从 Logstash 1.3.0 开始,您可以使用自动创建的 geoip.location 字段,而不是手动创建坐标字段并将其转换为浮点数。

您的日志中似乎缺少一个大括号,我想这是正确的格式:

{
    "device": {
        "public_ip": "70.90.17.210",
        "mac": "00:01:02:03:04:05",
        "ip": "192.16.1.10"
    },
    "event": {
        "timestamp": "2014-08-15T00:00:00.000Z",
        "source": "system",
        "name": "status"
    },
    "status": {
        "channel": "channelname",
        "section": "pictures",
        "downlink": 1362930,
        "network": "Wi-Fi"
    }
}

在这种情况下,我建议您尝试以下过滤器配置(不带变异):

filter {
    geoip {
        source => "[device][public_ip]"
    }
}

那么您应该可以在地图中使用“geoip.location”。我做了一些研究和调试,发现为了正确解析,嵌套字段在用作源时应该用 [ ] 包围。

【讨论】:

  • 谢谢,我稍后试试
猜你喜欢
  • 2013-04-24
  • 1970-01-01
  • 2018-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-18
  • 2021-11-06
  • 2013-11-01
相关资源
最近更新 更多