ELK-基於用戶訪問IP作用戶熱力地圖展現

想必不少時候咱們都想直觀的看出訪問咱們網站的用戶是主要來自哪些地區的,kibana的做者在開發的時候也沒少給你們福利,nginx

已經內置了基於訪問IP作用戶熱力地圖展現的功能。因此也算是kibana給廣大用戶提供的一大福利,今天筆者就來帶你們一塊兒git

作一個直觀的熱力地圖出來。web


熱力地圖須要在filter模塊中使用geoip插件解析出用戶訪問IP所對應的地理位置信息並存儲進ES,而後kibana從ES中抽取geoipapp

信息進行直觀展現。frontend


第一步,logstash配置部分ide

filter {網站

  if [type] == "nginx-access-log" {spa

    grok {插件

      match => { "message" => "%{HOSTNAME:logserver} %{PATH:logpath} %{NGINX_ACCESS_LOG}" }code

      remove_field  => "message"

    }

    date {

      match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z", "yyyy/MM/dd HH:mm:ss" ]

    }

    geoip {

      source => "remote_addr"

    }

  }

}


geoip實際須要的配置比較少,但須要咱們理解清楚這個配置的意義

source => "remote_addr"意思是解析remote_addr這個字段中保存的IP信息的地理位置

也就是說如何讓IP和地圖上的地理位置對應起來,是須要使用remote_addr字段中的IP進行

處理的,因此須要提早解析出remote_addr這個字段,固然這個字段名稱不是死的,只

要能對應上就行。

    geoip {

      source => "remote_addr"

    }


作完這一步,咱們能夠經過控制檯輸出的方式直接查看goeip模塊是否已經生效

  "_source": {

    "type": "nginx-access-log",

    "request_body": "\"-\"",

    "logpath": "/data/log/nginx/2hz-nginx-frontend-access.log",

    "@version": "1",

    "logserver": "web-1-test",

    "user_agent": "\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36\"",

    "remote_addr": "27.216.191.190",

    "geoip": {

      "timezone": "Asia/Shanghai",

      "region_name": "Shandong",

      "ip": "27.216.191.190",

      "latitude": 37.3592,

      "continent_code": "AS",

      "country_code2": "CN",

      "location": {

        "lat": 37.3592,

        "lon": 120.3964

      },

      "region_code": "37",

      "country_code3": "CN",

      "city_name": "Zhaoyuan",

      "longitude": 120.3964,

      "country_name": "China"

    },

    "@timestamp": "2018-10-26T01:43:54.000Z",

    "timestamp": "26/Oct/2018:09:43:54 +0800",

    "body_bytes": "245",

    "request": "\"GET /buy/load-numbers/99?_=1540507840931 HTTP/1.0\"",

    "status_code": "200",

    "upstream_response_time": "0.040",

    "http_referer": "\"https://www.test.com/buy/order/db30c\"",

    "remote_user": "-",

    "request_time": "0.041"

  }


如何可以看到以下的這一部分解析結果說明logstash部分配置正確

    "geoip": {

      "timezone": "Asia/Shanghai",

      "region_name": "Shandong",

      "ip": "27.216.191.190",

      "latitude": 37.3592,

      "continent_code": "AS",

      "country_code2": "CN",

      "location": {

        "lat": 37.3592,

        "lon": 120.3964

      },

      "region_code": "37",

      "country_code3": "CN",

      "city_name": "Zhaoyuan",

      "longitude": 120.3964,

      "country_name": "China"

    },


這一步中還須要補充說明一下的就是若是nginx的索引名稱自定義過(不是使用logstash-開頭的索引名稱時),

就須要修改ES的映射模板,或者經過logstash管理自定義的mapping映射模板,不然自定義nginx索引不會把

geoip信息保存會geo_point類型,最後設定kibana時就會直接報錯說「找不到goe_point類型的字段,以至

沒法實現展現地圖的效果。


關於如何自定義nginx映射模板問題請參閱博文http://www.javashuo.com/article/p-ablaogje-s.html


第二步:kibana頁面上的設定

點擊visualize選項卡-->點擊搜索欄右邊的「+」-->選擇"Coordinate Map"-->"From a New Search, Select Index"-->選擇nginx的索引模式-->點擊「Geo Coordinates」-->點擊「Aggregation」下拉前頭-->選擇「GeoHash」-->field字段選擇「geoip.location」-->

點擊索引名稱下文的「Apply changes」按鍵,就能夠看到熱力地圖了。

想要保存剛纔所作的配置的話,只須要點擊頁面最上方的「Save」按鈕就能夠給本身的熱力配置命個名稱並保存。

image.png

到此爲止,想要的熱力地圖就要拿去給同種秀一秀了。還能夠把熱力地圖作爲Dashboard的一部分,和其它圖形

放在一直進行綜合展現,只要能把本身想要的圖形作出來,向綜合頁面添加就太簡單了。

相關文章
相關標籤/搜索