1.grafana的worldmmap面板插件
Worldmap面板是世界的平鋪地圖,可以用表示查詢數據點的圓圈覆蓋。它可以與時間序列度量一起使用,包括來自Elasticsearch的geohash數據或表格格式的數據。
2.grafana的數據源
(1)一個位置的經緯度(geoip.location)
(2)另一個是你要顯示的field(geoip.city_name)
3.理解一下插件的request的原理
"query":{
"bool":{
"filter":[{
"aggs":{
"4":{
"geohash_grid":{
"field":"geoip.location","precision":3},
"aggs":{
"3":{
"terms":{
"field":"geoip.city_name.keyword","size":10},
1)從上面可以看出,我們的worldmap插件把我們的配置具體化一elasticsearch的查詢語句,我們的map的顯示一般需要我們配置geoip.location和geoip.city_name.keyword兩個參數。
2)其中的grafana能用geoip.city_name.keyword和kibana能用geoip.city_name,grafana用geoip.city_name作爲field時,會報以下錯誤:
Fielddata is disabled on text fields by default. Set fielddata=true on [keyword.city_name] in order to load fielddata in memory by uninverting the inverted index.
報錯讓我開啓fielddata,elasticsearch官方文檔解釋:“fielddata開啓後會佔用大量的內存,所以默認是關閉的,同時官方也給出瞭解決這個問題的辦法,
Use the my_field.keyword field for aggregations, sorting, or in scripts,就是使用geoip.city_name.keyword字段進行查詢聚合。
4.以geohashes作爲數據源
這是我Logstash的filter利用geoip查詢數據庫解析IP地址位置信息的配置:
geoip {
source => "client_IP"
target => "geoip"
database => "/usr/share/logstash/GeoIP/GeoLite2-City.mmdb"
fields => ["location", "country_name", "city_name"]
}
下面是kibana的以json格式展示出來的地理信息
"geoip": {
"city_name": "Beijing",
"country_name": "China",
"location": {
"lat": 39.9289,
"lon": 116.3883
}
location獲取經緯度,country_name和city_name分別取出國家和城市,我們grafana可以通過location的經緯度來顯示數據。
grafana支持的數據庫:ElasticSearch,The Geo-point data type with geohash indexing in Elasticsearch can also be used as a datasource for the worldmap panel. Grafana has a new bucket aggregate for Elasticsearch queries - Geo Hash Grid that allows grouping of coordinates. The Geo Hash Grid has a precision option where 1 is the highest level and 7 is the lowest.
grafana有一個新的buchet的聚合爲 Geo Hash Grid,同時可以進行精度設置precision(1-7)。
5.下面我們進行配置
(1)進入worldmap的設置界面,
上面說我們以geohashes作爲數據源的格式,location Data選取“geohash”,同時我們也要指定經緯度的字段,填寫經緯度所在的“geoip.location”field,這個field必須設置,因爲grafana通過這個字段才能找到經緯度的filed。
(2)metrics界面設置
(3)顯示效果