ES解決geoip的location不為geo_point格式


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】


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM