在 Logstash 中从 CSV(纬度和经度列)创建地理点对象

Creating a geopoint object from CSV (latitude and longitude columns) in Logstash

我有一个包含列 latitudelongitude 的 CSV,我正在尝试在 Logstash 2.3.3 中创建一个 geopoint 对象,以便我可以在基巴纳 4.5.1。

然而,当在 Kibana 中可视化数据时,我看到 location.latlocation.lon,它们都是 float 类型,而不是 location 类型 geopoint .

总的来说,我是 ELK 的新手,这让我抓狂。特别是因为我找到的大部分信息都已过时。

我正在使用的 .conf 文件如下所示:

input {  
    file {
        path => "C:/file.csv"
        start_position => "beginning"    
    }
}

filter {  
    csv {
        separator => ","
        columns => ["longitude","latitude"]
    }

    mutate { convert => {"latitude" => "float"} }
    mutate { convert => {"longitude" => "float"} }
    mutate { rename => {"latitude" => "[location][lat]"} }
    mutate { rename => {"longitude" => "[location][lon]"} }
    mutate { convert => { "[location]" => "float" } }
}

output {  
    elasticsearch {
        template => "...\elasticsearch-template.json"
        template_overwrite => true
        action => "index"
        hosts => "localhost"
        index => "testindex1"
        workers => 1
    }
    stdout {}
}

我指定的模板文件 (elasticsearch-template.json) 如下:

{
  "template" : "logstash-*",
  "settings" : {
    "index.refresh_interval" : "5s"
  },
  "mappings" : {
    "_default_" : {
      "_all" : {"enabled" : true, "omit_norms" : true},
      "dynamic_templates" : [ {
        "message_field" : {
          "match" : "message",
          "match_mapping_type" : "string",
          "mapping" : {
            "type" : "string", "index" : "analyzed", "omit_norms" : true,
            "fielddata" : { "format" : "disabled" }
          }
        }
      }, {
        "string_fields" : {
          "match" : "*",
          "match_mapping_type" : "string",
          "mapping" : {
            "type" : "string", "index" : "analyzed", "omit_norms" : true,
            "fielddata" : { "format" : "disabled" },
            "fields" : {
              "raw" : {"type": "string", "index" : "not_analyzed", "ignore_above" : 256}
            }
          }
        }
      } ],
      "properties" : {
        "@timestamp": { "type": "date" },
        "@version": { "type": "string", "index": "not_analyzed" },
        "geoip"  : {
          "dynamic": true,
          "properties" : {
            "ip": { "type": "ip" },
            "location" : { "type" : "geo_point" },
            "latitude" : { "type" : "float" },
            "longitude" : { "type" : "float" }
          }
        },
  "location" : { "type": "geo_point" }
      }
    }
  }
}

如果有人可以帮助我或让我了解我做错了什么,我将不胜感激。另外,我相信这会对和我在同一条船上的每个人有所帮助。

我解决了它,它现在运行良好。 模板正在寻找 logstash-* 类型的索引,而我正在使用 testindex1。将我的索引更改为 logstash-%{+dd.MM.YYYY} 修复了它。

您需要删除最后一个 mutate 过滤器,它会破坏您想要达到的目的。

您还需要确保 testindex1 映射忠实地包含您在 elasticsearch-template.json 文件中的映射