想必很多時候我們都想直觀的看出訪問我們網站的用戶是主要來自哪些地區的,kibana的作者在開發的時候也沒少給大家福利,
已經內置了基於訪問IP做用戶熱力地圖展示的功能。所以也算是kibana給廣大用戶提供的一大福利,今天筆者就來帶大家一起
做一個直觀的熱力地圖出來。
熱力地圖需要在filter模塊中使用geoip插件解析出用戶訪問IP所對應的地理位置信息並存儲進ES,然後kibana從ES中抽取geoip
信息進行直觀展示。
第一步,logstash配置部分
filter {
if [type] == "nginx-access-log" {
grok {
match => { "message" => "%{HOSTNAME:logserver} %{PATH:logpath} %{NGINX_ACCESS_LOG}" }
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://blog.51cto.com/183530300/2308763
第二步:kibana頁面上的設定
點擊visualize選項卡-->點擊搜索欄右邊的“+”-->選擇"Coordinate Map"-->"From a New Search, Select Index"-->選擇nginx的索引模式-->點擊“Geo Coordinates”-->點擊“Aggregation”下拉前頭-->選擇“GeoHash”-->field字段選擇“geoip.location”-->
點擊索引名稱下文的“Apply changes”按鍵,就可以看到熱力地圖了。
想要保存剛纔所做的配置的話,只需要點擊頁面最上方的“Save”按鈕就可以給自己的熱力配置命個名稱並保存。
到此爲止,想要的熱力地圖就要拿去給同種秀一秀了。還可以把熱力地圖做爲Dashboard的一部分,和其它圖形
放在一直進行綜合展示,只要能把自己想要的圖形做出來,向綜合頁面添加就太簡單了。