给kibana4中配置中国地图(添加最新版4.3.1修改方法)

因本人使用的是 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://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
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.**>       #这里上接上面的tag
type geoip
geoip_lookup_key client_ip #这个是用户真实IP的字段
enable_key_country_code geoip_country
enable_key_city geoip_city
#enable_key_latitude geoip_lat
#enable_key_longitude geoip_lon
<record>                                 #这里是因为本身经纬度坐标是独立的两个字段,这里使用location合并
location ${latitude["client_ip"]},${longitude["client_ip"]}
</record>
remove_tag_prefix geoip-order.
add_tag_prefix es-order.    #这里是新添加的tag
#flush_interval 5s

skip_adding_null_record  true  #遇到值为null的记录,跳过此字段
</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中应该可以看到如下图中的字段

QQ20150901-4@2x

打开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> &amp;mdash; ' +
'Map data &amp;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'
});
*/


//add gaode map by elain
var tileLayer = L.tileLayer('http://webrd0{s}.is.autonavi.com/appmaptile?lang=zh_cn&amp;size=1&amp;scale=1&amp;style=8&amp;x={x}&amp;y={y}&amp;z={z}', {
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://webst0{s}.is.autonavi.com/appmaptile?style=6&amp;x={x}&amp;y={y}&amp;z={z}'
}
}
});

保存,重新加载

使用tilemap创建地图效果如下:

QQ20150901-3@2x

在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
末尾添加:

1
2

'ui/vislib'

重启生效

参考资料:
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/

文章目录
,