logstash geoip.location映射到geo_point不起作用

时间:2017-03-13 19:36:03

标签: elasticsearch geolocation logstash elastic-stack logstash-grok

我可以在默认映射中看到geoip.location映射到geo_point类型:

GET myserver:9200/_template
    {
      "logstash": {
        "order": 0,
        "version": 50001,
        "template": "logstash-*",
        "settings": {
          "index": {
            "refresh_interval": "5s"
          }
        },
        "mappings": {
          "_default_": {
            "dynamic_templates": [
              {
                "message_field": {
                  "path_match": "message",
                  "mapping": {
                    "norms": false,
                    "type": "text"
                  },
                  "match_mapping_type": "string"
                }
              },
              {
                "string_fields": {
                  "mapping": {
                    "norms": false,
                    "type": "text",
                    "fields": {
                      "keyword": {
                        "type": "keyword"
                      }
                    }
                  },
                  "match_mapping_type": "string",
                  "match": "*"
                }
              }
            ],
            "_all": {
              "norms": false,
              "enabled": true
            },
            "properties": {
              "@timestamp": {
                "include_in_all": false,
                "type": "date"
              },
              "geoip": {
                "dynamic": true,
                "properties": {
                  "ip": {
                    "type": "ip"
                  },
                  "latitude": {
                    "type": "half_float"
                  },
                  "location": {
                    "type": "geo_point"
                  },
                  "longitude": {
                    "type": "half_float"
                  }
                }
              },
              "@version": {
                "include_in_all": false,
                "type": "keyword"
              }
            }
          }
        },
        "aliases": {}
      }
    }

我在logstash过滤器中有这个来从我的一个字段中获取geoip数据:

geoip {
  source => "myField"
  add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ]
  add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}"  ]
}
mutate {
  convert => [ "[geoip][coordinates]", "float"]
}

但是,当它进入ES时,位置字段是一个"数字" enter image description here

此外,如果我尝试使用kibana地图可视化,它会显示" No Compatible Fields"

为什么默认映射不起作用?

编辑: 我也尝试了geoip { source => "myfield"},因为我的默认映射是使用位置而不是坐标,但这不起作用。

我也摆脱了变异并试了这个,但它也不起作用:

geoip {
  source => "myfield"
  add_field => [ "[geoip][location]", "%{[geoip][longitude]}" ]
  add_field => [ "[geoip][location]", "%{[geoip][latitude]}"  ]
}

2 个答案:

答案 0 :(得分:2)

你可能只有一个拼写错误(第1点),但还包括其他几个要注意的事项。

  1. 您在logstash中使用geoip.coordinates,在geoip.location
  2. 中使用_mapping
  3. 您需要删除convert => [ "[geoip][coordinates]", "float"] - 这是错误的。
  4. 在ES中的某个字段中存在数据后,如果不使用新映射重新索引数据,则无法将其转换为geo_point(如果您处于开发阶段,通常意味着删除任何数据)索引并重新插入数据。)
  5. 更改映射后,kibana设置中有一个按钮可重新加载映射。

答案 1 :(得分:2)

https://discuss.elastic.co/t/geoip-location-not-getting-mapped-to-a-geo-point-type/78625

问题是我对索引映射如何工作的无知。此默认映射适用于与名称匹配的索引" logstash - *"我的索引名称与那个名称不匹配。

将我的索引名称更改为logstash-myindex工作。