2015-09-14 2 views
0

У меня есть JSON-файл с этой структурой:Как изменить или добавить поле JSon от logstash работать с geo_point в ElasticSearch и Kibana

{"vhost": "8.8.8.8", "host": "8.8.8.8", "port": 80, "ip": "189.191.116.19", "host.latitude":"40.408599853515625","host.longitude":"-3.692199945449829"} 

И у меня есть logstash конфигурационный файл, как это:

input { 
    stdin { 
    type => "json" 
    } 
} 
filter{ 
    json{ 
     source => "message" 
    } 
} 

output { 
     stdout{} 
} 

Я хочу преобразовать записи json, чтобы использовать тип geo_point в ES и Kibana. Согласно официальной документации в https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-geo-point-type.html широта и долгота поля должны быть в формате, как это:

"pin" : { 
     "location" : { 
      "lat" : 41.12, 
      "lon" : -71.34 
     } 
    } 

Мой вопрос, как я могу преобразовать из logstash ввода JSon, так что я могу использовать geo_point? , Я предполагаю, что я не могу самостоятельно изменить структуру json, но, возможно, я могу добавить новое поле с архитектурой местоположения, требуемой типом geo_point.

Спасибо

ответ

1

Самый простой способ для достижения этой цели является сцепить два поля host.latitude и host.longitude в другое поле, которое может быть отображено в виде geopoint as string.

Вам просто нужно добавить еще один фильтр mutate после json фильтра, как это:

filter{ 
    json{ 
     source => "message" 
    } 
    mutate { 
     add_field => { "location" => "%{host.latitude},%{host.longitude}" } 
    } 
} 

В результате location поле будет создан, который можно отобразить как geo_point типа в вашем отображении.

+0

Ваша ссылка 404ing, скорее добавьте основной контент со страницы – surfer190

+0

Ссылка исправлена – Val