10.Kibana深入-使用地图统计客户端IP
[toc]
地址库
在ELK中,我们可以使用地址库,来对IP进行分析,对日志进行分析,在ELKstack中只有Logstash可以做到,但是出图,是Kibana来出的,所以我们首先需要下载地址库数据文件,然后对Logstash进行配置,使用geoip
模块对日志访问IP进行分析后,再以中国地图
或者是世界地图
的形式,展现在Kibana中。
下载地址库
Logstash2版本下载地址:http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
logstash5版本下载地址:http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.tar.gz
1 | # 进入Logstash目录 |
配置Logstash使用地址库
配置Logstash
1 | # 进入Logstash配置文件目录 |
验证Kibana中的数据
打开浏览器,访问:http://10.0.0.54:5601
北京公网IP
海南公网IP
吉林公网IP
黑龙江公网IP
配置Kibana使用地图
Kibana画中国地图
如图:报错:”No Compatible Fields: The “[blog.driverzeng.com -]YYYY.MM.DD” index pattern does not contain any of the following field types: geo_point”
原因:索引格式为[blog.driverzeng.com -]YYYY-MM的日志文件由logstash输出到Elasticsearch;在elasticsearch中,所有的数据都有一个类型,什么样的类型,就可以在其上做一些对应类型的特殊操作。geo
信息中的location
字段是经纬度,我们需要使用经纬度来定位地理位置;在elasticsearch中,对于经纬度来说,要想使用elasticsearch提供的地理位置查询相关的功能,就需要构造一个结构,并且将其类型属性设置为geo_point
,此错误明显是由于我们的geo
的location
字段类型不是geo_point
。
1 | # 验证一下 |
其中”location”:{“type”:”float”},”,字段类型是float
,而不是geo_point
,因此会报图中的错误。
解决方法:Elasticsearch支持给索引预定义设置和mapping(前提是你用的 elasticsearch 版本支持这个API,不过估计应该都支持)。其实ES中已经有一个默认预定义的模板,我们只要使用预定的模板即可,那为什么还会报错呢?因为默认预定义的模板必须只有匹配 logstash-* 的索引才会应用这个模板,由于我们在logstash中使用的是[blog.driverzeng.com -]YYYY.MM.DD索引方式,因此不会匹配到默认模板,我们只需要改一下索引方式即可:
1 | # 修改一下索引方式 |
将输出到ES的索引: index => "%{type}-%{+YYYY.MM.dd}"
改为: index => "logstash-%{type}-%{+YYYY.MM.dd}"
1 | # 重启Logstash,登录Kibana刷新 |
再次查看Kibana
继续画图
也可以根据自己喜好,画成热力图
保存,可以放入Dashboard