因本人使用的是 fluentd 来收集日志,并不是logstash ,所以,以下是fluentd 中的配置:
下载IP库(这里使用的maxmind的免费版,大家如公司有收费版本直接采用即可)
http://dev.maxmind.com/geoip/legacy/geolite/
1 2 3 4
| mkdir -p && cd /etc/td-agent/maps axel -n 10 http: gunzip GeoLiteCity.dat.gz
|
在tg-agent中添加好geoip数据库后,安装fluent的geoip插件
1 2 3 4
| /opt/td-agent/embedded/bin/fluent-gem install fluent-plugin-geoip-0.5.1.gem /opt/td-agent/embedded/bin/fluent-gem install fluent-mixin-rewrite-tag-name-0.1.0.gem /opt/td-agent/embedded/bin/fluent-gem install fluent-plugin-geoip-0.5.1.gem
|
#注:这里如果安装失败,可能是网络原因,请直接下载对就包本地安装,我这里就是下载的gem包直接本地安装
在td-agent.conf中添加:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <match geoip-order.**> type geoip geoip_lookup_key client_ip enable_key_country_code geoip_country enable_key_city geoip_city
<record> location ${latitude["client_ip"]},${longitude["client_ip"]} </record> remove_tag_prefix geoip-order. add_tag_prefix es-order.
skip_adding_null_record true </match>
|
重启td-agent
在es的mappings中加入:
1 2 3 4 5 6 7 8 9
| "geoip" : { "type" : "object", "dynamic": true, "path": "full", "properties" : { "location" : { "type" : "geo_point" } } }
|
重建索引,这里的kibana中应该可以看到如下图中的字段

打开kibana4的index.js ,
路径:kibana/src/public/index.js 约 137475行左右
原先的titleLayer注释替换即可,以下是添加的高德地图:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
var tileLayer = L.tileLayer('https://otile{s}-s.mqcdn.com/tiles/1.0.0/map/{z}/{x}/{y}.jpeg', { attribution: 'Tiles by <a href="http://www.mapquest.com/">MapQuest</a> &mdash; ' + 'Map data &copy; <a href="http://openstreetmap.org">OpenStreetMap</a> contributors, ' + '<a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>', subdomains: '1234' }); */
var tileLayer = L.tileLayer('http: attribution: 'Tiles by <a href="http://www.mapquest.com/">MapQuest</a> — ' + 'Map data © <a href="http://openstreetmap.org">OpenStreetMap</a> contributors, ' + '<a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>', subdomains:["1","2","3","4"], variants: { Satellite:{ url: 'http: } } });
|
保存,重新加载
使用tilemap创建地图效果如下:

在logstash里面使用(未经过测试验证)
1 2 3 4 5 6 7
| geoip { source => "client_ip" target => "geoip" database => "/home/work/app/logstash/maps/GeoLiteCity.dat"
}
|
最新版4.3.1 的修改方法:
打开 ./src/ui/public/vislib/visualizations/_map.js +11
把:
1 2
| url: 'https://otile{s}-s.mqcdn.com/tiles/1.0.0/map/{z}/{x}/{y}.jpeg',
|
替换为:
1 2
| url: 'http://webrd0{s}.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}',
|
最重要的是这里,记得修改后在以下文件加载一下,才会生效,我理解是需要预编译的,否则会被cache住,所有的修改并不能及时生效。
打开 ./src/ui/autoload.js +35
末尾添加:
重启生效
参考资料:
https://www.digitalocean.com/community/tutorials/how-to-map-user-location-with-geoip-and-elk-elasticsearch-logstash-and-kibana
http://zhou5zhou6.com/2015/03/19/kibana_map/