Logstash/Elasticsearch 保留自动映射 geoip 到对象而不是 geo_point

Logstash/Elasticsearch keep auto-mapping geoip to object instead of geo_point

我有一些具有以下格式的日志(我将 IP 从 public 更改为私有,但你明白了):

192.168.0.1 [20/Nov/2019:16:09:28 +0000] GET /some_path HTTP/1.1 200 2 2
192.168.0.2  [20/Nov/2019:16:09:28 +0000] GET /some_path HTTP/1.1 200 2 2

然后我使用以下模式来理解这些日志:

grok { match => { "message" => "%{IPORHOST:clientip} \[%{HTTPDATE:timestamp}\] %{WORD:method} %{URIPATHPARAM:request} %{DATA:httpversion} %{NUMBER:response} %{NUMBER:duration}" } }
         geoip { source => "clientip" }

在我的输出部分,我有以下代码:

else  if "host.name" in [host][name]{ #if statement with the hostname
  elasticsearch {
    hosts => "localhost:9200"
    manage_template => false
    index => "mms18-%{+YYYY.MM.dd}"
    user => "admin-user"
    password => "admin-password"
  }

}

问题是,当我转到 Kibana 时,geoip.location 被映射为一个对象,我无法在地图仪表板上使用它。 由于索引的名称每天都在变化,我无法手动放置正确的 geoip 映射,因为我必须每天都这样做。

我认为部分解决问题的一个解决方案是从 Logstash 输出中的索引中删除日期,因此它具有 "mms18" 的常量索引,然后在 Kibana 管理控制台上使用它:

PUT mms18
{
  "mappings": {
    "properties": {
      "geoip": {
        "properties": {
          "location": { "type": "geo_point" }
        }
      }
    }
  }
}

但是,这并不理想,因为我希望可以选择显示所有索引及其相关日期,然后选择要删除的内容和不删除的内容。 有什么方法可以实现正确的映射,同时保留索引及其日期?

如有任何帮助,我们将不胜感激。

使用 index template(index_patterns 的值类似于 "mms-*")将 geoip 映射为 geo_point。