ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

ES解决geoip的location不为geo_point格式

2020-08-18 15:00:55  阅读:470  来源: 互联网

标签:log point geoip 索引 location template geo


by: 铁乐猫

date: 2020-01-08

环境

ELK各组件均为7.0版本

出现问题的索引名称为tielemao_web_log*

问题

使用了geoip插件,入库的索引中location仍不是geo_point格式,以致想做地图经纬度的展示时做不了。

原因:

默认的log_template模板中没有任何匹配。

解决办法

新建索引模板,设置匹配成geo_point,且优先度调高。

另外为防以后新项目入log重新碰到这个问题,将默认的log_template模板也加上geo_point的相关设置。

默认索引模板添加geoip映射

打开kibana的Dev Tools,本次操作索引模板在web界面下操作比较方便。

log_template会默认就匹配上我们的索引:

在kibana的Dev Tools里的Console中输入

GET /_template/log_template

点击三角形图标执行,右边会出现结果:

{
  "log_template" : {
    "order" : 0,
    "index_patterns" : [
      "*log*"
    ],
    "settings" : {
      "index" : {
        "number_of_replicas" : "0"
      }
    },
    "mappings" : { },
    "aliases" : { }
  }
}

index_patterns中可以看到匹配索引名称中带log的:

"index_patterns" : [
  "*log*"
],

所以以防万一,在这个默认优先级0的模板中也加上:

PUT /_template/log_template
{
  "order" : 0,
  "index_patterns" : [
      "*log*"
  ],
  "settings" : {
    "index" : {
      "number_of_replicas" : "0"
    }
  },
  "mappings" : {
    "properties": {
      "client_ip": {
        "type": "ip"
      },
      "geoip": {
        "dynamic": true,
        "type": "object",
        "properties": {
          "location": {
            "type": "geo_point"
          }
        }
      }
    }
  },
  "aliases" : { }
}

这里主要是看:

"mappings" : {
    "properties": {
      "client_ip": {
        "type": "ip"
      },
      "geoip": {
        "dynamic": true,
        "type": "object",
        "properties": {
          "location": {
            "type": "geo_point"
          }
        }
      }
    }
  },

其中生效的是geoip的那一段,mappings的properties中添加了geoip这个字段,并且使用dynamic,允许Logstash的geoip插件将解析后的详细字段也保存到ES索引中。

geoip插件解析出来会带有一个location字段,这个字段就是经纬度的坐标点,所以重点是这里要设置geoip.location字段的类型是geo_point。

Geo-point表示为一个object,具有lat和lon两个key。

改完可以GET再去看一下生效没有。

新建匹配的索引模板

我这里按照自己的情况新建了一个优先度为10且一定匹配得上的模板,例:

PUT /_template/template_tielemao_weblog
{
  "index_patterns" : [
      "tielemao_web_log*"
  ],
  "order" : 10,
  "mappings": {
    "properties": {
      "client_ip": {
        "type": "ip"
      },
      "geoip": {
        "dynamic": true,
        "type": "object",
        "properties": {
          "location": {
            "type": "geo_point"
          }
        }
      }
    }
  },
  "aliases" : {
      "tielemao_weblog" : { }
  }
}

其中匹配em_web_log*名字的索引,且order优先度为10,比默认的模板都高:

  "index_patterns" : [
      "em_web_log*"
  ], 
  "order" : 10,

另外还起了个别名,方便以后零停机时间实现重新索引。

效果

新建完索引后,前面入库的索引及索引模式我都删除掉了,防止新索引模板不生效。

删除后,等待新的索引生成,再在索引管理中查看,己经生效了:

之后再在可视化中做展示就可以了,不会在选择Geohash的时候提示你没有geo_point,例:

【End】

标签:log,point,geoip,索引,location,template,geo
来源: https://www.cnblogs.com/tielemao/p/13523564.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有