如何在logstash中映射位置(lon,lat)以在kibana中可视化?

时间:2017-02-02 09:58:04

标签: geolocation logstash

我有一个csv文件,其中包含一些记录的经度和纬度(否则它是""")。现在我想使用logstash 5.1.2将数据转换为elasticsearch 5.1.2。我已经编写了以下配置文件,但位置字段仍然映射到文本。

input {  
      file {
            path => "/usr/local/Cellar/logstash/5.1.2/bin/data.csv"
            start_position => "beginning"
            sincedb_path => "/dev/null"
      }
}

filter {  
    csv {
        columns => ['logtime', 'text', 'user', 'country', 'location']
        separator => ","
    }
    date {
        match => ["logtime", "yyyy-MM-dd HH:mm:ss"]
        timezone => "Europe/London"
        target => "Date"
    }
    if [latitude] and [longitude] {
    mutate { convert => {"latitude" => "float"} }
    mutate { convert => {"longitude" => "float"} }
    mutate { rename => {"latitude" => "[location][lat]"} }
    mutate { rename => {"longitude" => "[location][lon]"} }
    }
}

output {
  elasticsearch { 
    hosts => ["localhost:9200"] 
    index => "twitter"}
}

我应该怎么做才能将位置字段映射为地理位置,并能够在Kibana 5.1.2中可视化地图上的点?感谢

1 个答案:

答案 0 :(得分:3)

您需要创建将location映射到geo_point的映射。最简单的方法是使用索引模板,这样当您开始使用基于时间的索引时,它将在创建新索引时自动创建映射。

PUT /_template/twitter
{
  "order": 0,
  "template": "twitter*",
  "mappings": {
    "_default_": {
      "properties": {
        "location": {
          "type": "geo_point"
        }
      }
    }
  }
}

然后删除您的/twitter索引并重新索引您的数据。

上述模板表示,使用名称twitter*创建的任何索引都会将_type的{​​{1}}字段变为location