EFK 配置geo-ip落地實踐

宋奕發表於2018-10-11

這次接到的需求是,可以根據使用者的ip地址,實時展示在我們大中國的地圖上。

被飛哥告知可以在EFK上實現,再經過一番調研,得出以下結論

  1. 目的效果圖
    image.png
  2. 在伺服器上配置GEO外掛。參考地址 github.com/y-ken/fluen…
# for RHEL/CentOS
$ sudo yum groupinstall "Development Tools"
$ sudo yum install geoip-devel --enablerepo=epel
# for td-agent2
$ sudo td-agent-gem install fluent-plugin-geoip
複製程式碼
  1. 配置td-agent檔案
<filter nginx.**>
  @type extract_query_params
  key            path
  only url_path
  discard_key    true
  add_url_path   true
  add_field_prefix params.
  skip_adding_null_record true
</filter>

<filter nginx.**> 
@type geoip     
   geoip_lookup_key remote     
   geoip_database /opt/td-agent/embedded/lib/ruby/gems/2.1.0/gems/fluent-plugin-geoip-1.2.0/data/GeoLiteCity.dat     
   geoip2_database /opt/td-agent/embedded/lib/ruby/gems/2.1.0/gems/fluent-plugin-geoip-1.2.0/data/GeoLite2-City.mmdb     
   <record>     
      city         ${city.names.zh-CN["remote"]}     
      country      ${country.iso_code["remote"]}     
      country_name ${country.names.zh-CN["remote"]}     
      location '[${location.longitude["remote"]},${location.latitude["remote"]}]'     
   </record>
</filter>
複製程式碼

其中remote欄位為解析出的ip地址。目前線上應該改為 http_x_forwarded_for欄位。 注意,這裡的filter必須分開寫 最終輸出location欄位為解析出的經緯度。

image.png

  1. 配置elasticsearch 配置好以上需求後,直接開啟Kibana的地圖,會出現以下錯誤
No Compatible Fields: The "xxx" index pattern does not contain any of the following field types: geo_point
複製程式碼

主要是因為,在Kibana中檢視地圖選項的資料來源格式應該為geo-point。而現在生成的location資料為number型別,Kibana無法讀取。

所以需要做以下配置。

  1. 首先,執行以下命令,檢視mappings中的路徑
    image.png

可以看到mappings下的路徑為fluentd。線上目前是_doc。 然後,執行以下程式碼,設定相應的模板,可以使後面生成的新的索引檔案中,location的型別為geo-point。

PUT _template/logstash
{
  "template": "logstash-*",
  "mappings": {
    "fluentd": {
      "properties" : {
        "location": { "type": "geo_point"}
      }
    }
  }
}
複製程式碼

至此已經設定完所有配置。接下來主要說哪裡有坑。 第一次配置td-agent的時候,需要把location的欄位登出,保證沒有在新的索引檔案生成之前沒有任何number型別的location寫入,否則,location的geo-point型別不生效。 等到第二天,再把location的登出取消,然後重新整理Kibana中的index pattern就可以看到正常資料了!

image.png
至此,打完收工

相關文章