logstash - geoip в Kibana не может отображать какую-либо информацию с использованием IP-адресов

Я хочу отображать количество пользователей, обращающихся к моему приложению, на карте мира с помощью 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

Может ли кто-нибудь помочь мне и указать мне, где моя ошибка?


person ataman79    schedule 21.08.2014    source источник
comment
Вы можете показать вывод rubydebug? ` output { elasticsearch { host => localhost } stdout { codec => rubydebug } } `   -  person teaforthecat    schedule 27.08.2014
comment
Спасибо за ответ. Можете ли вы объяснить более подробно, как это запустить, так как я не слишком хорошо знаком с Ruby. Спасибо заранее.   -  person ataman79    schedule 08.09.2014
comment
просто замените блок вывода, который у вас есть, блоком из моего предыдущего комментария   -  person teaforthecat    schedule 10.09.2014
comment
Хорошо, я добавил его в свой файл конфигурации logstash, после этого я перезапустил logstash (он работает нормально), и что мне нужно искать? заранее спасибо   -  person ataman79    schedule 10.09.2014


Ответы (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» на своей карте. Я провел довольно много исследований и отладки, чтобы выяснить, что для правильного разрешения вложенные поля должны быть окружены [ ] при использовании в качестве источника.

person filipov    schedule 10.09.2014
comment
Спасибо попробую позже - person ataman79; 23.09.2014