ELK 地理分布热度图

geoip

Posted by Tillend on April 5, 2019

地理分布热度图

GrafanaKibana绘制地理分布热度图,需要对ELK组件进行相关设置

Logstash geoip插件

geoip过滤器根据来自Maxmind GeoLite2数据库的数据添加有关IP地址的地理位置的信息。

详细配置见Geoip filter plugin

1
2
3
4
geoip {
  source => "[request_ip]"
  remove_field => ["tags", "[geoip][latitude]", "[geoip][longitude]", "[geoip][continent_code]", "[geoip][country_code3]", "[geoip][country_code2]"]
}

Logstash输出

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
"nginx.access.http_version" => "1.1",
   "geoip" => {
     "city_name" => "Hebei",            #城市地址
      "timezone" => "Asia/Shanghai",       #时区
            "ip" => "123.183.135.141",   #IP地址
      "latitude" => 39.8897,           #纬度
      "longitude" => 115.275,           #经度
  "country_name" => "China",      #国家的名字
 "country_code2" => "CN",         #国家简写
"continent_code" => "AS",         #洲
 "country_code3" => "CN",          
   "region_name" => "Hebei",      #地区名称 
      "location" => {             #位置
            "lon" => 115.275,           #经度
            "lat" => 39.8897            #维度
      }
}

ES索引模板

通过配置 ES索引模板 或 ES索引mapping 设置geoip的类型

使用nginx-*kong-*的es模板已设置geoip的类型

ES索引模板

使用ES索引模板设置geo_point类型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
"properties" : {
  "geoip" : {
    "dynamic" : true,
    "properties" : {
      "ip" : {
        "type" : "ip"
      },
      "location" : {
        "type" : "geo_point"
      },
      "latitude" : {
        "type" : "half_float"
      },
      "longitude" : {
        "type" : "half_float"
      }
    }
  }
}

ES索引mapping

1
2
3
4
5
6
7
8
"geoip" : {
    "properties" : {
        "location" : {
            "type" : "geo_point",
            "ignore_malformed": "true"  
        }
    }
}

ignore_malformed若为true,格式错误的地理位置被忽略。若为false,格式错误的地理位置引发异常并拒绝整个文档。

Grafana/Kibana绘图