2015-09-14 76 views
0

geo_point工作,我有這個結構的JSON文件:如何修改或logstash添加JSON場在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記錄,以便我可以在ES和Kibana中使用geo_point類型。據 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.latitudehost.longitude連接成可以被映射爲geopoint as string另一個領域。

你只需要你的json過濾後多加一個mutate過濾器是這樣的:

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

其結果是,在location場將被創建,您可以映射爲在映射一個geo_point型。

+0

您的鏈接是404ing,而是從鏈接頁面添加主要內容 – surfer190

+0

鏈接已修復 – Val