logstash配置geoip画访问地域热图
geoip 主要用于 kibana 绘制地理区域图时使用,原理就是通过一个 IP 库,根据 IP 直接获取对应的地理坐标等信息,从而在地图上进行展示。
# 1,下载库。
既然依赖库,那么就先下载一下对应的库:
wget https://geolite.maxmind.com/download/geoip/database/GeoLite2-City.tar.gz
这个库是每周一更新的,在生产环境当中如果想要保证最终结果的准确性,可能需要周期性更新这个库。
解压:
$ tar xf GeoLite2-City.tar.gz
$ mv GeoLite2-City_20191126/GeoLite2-City.mmdb /etc/logstash/
2
然后在配置 logstash 转发日志的时候,将这个库引入即可。
# 2,logstash 配置。
网上针对这个地方的配置各种各样,致使我们有时候反而不知自己应该怎么配置才是最优的,之前我个人的思路也没走对,以至于费了不少功夫,没有多大收获。
这里需要进行一波调试,通过调试,我们获取自己想要的内容,让配置达到最优化。
# 1,全解析
想要得到最终答案,我们需要先看看配置项都给了我们哪些选择,这个时候可以直接用如下配置对 NGINX 访问日志进行解析:
input {
kafka {
bootstrap_servers => "192.168.3.0:9092"
group_id => "nginx"
consumer_threads => 6
topics => "nginx"
codec => "json"
client_id => "nginx"
}
}
filter {
geoip {
source => "remote_addr"
database => "/etc/logstash/GeoLite2-City.mmdb"
}
}
output {
stdout {
codec => rubydebug
}
}
# output {
# elasticsearch {
# hosts => ["http://192.168.3.0:9200"]
# index => "logstash-nginx-%{+YYYY.MM}"
# }
#}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
通过 filter 规则中的 geoip 模块进行解析, source
用于指定日志当中记录客户端 IP 的字段,database
则指定了我们解压之后的 IP 库。同时使用将日志打印到前台的方式,便于观察调试。
此时如有日志过来,则可以看到经由 logstash 接管之后的日志样式如下:
{
"request_time" => "5.495",
"httpversion" => "HTTP/1.1",
"request_uri" => "/synchrony-proxy/v1/bayeux-sync1",
"server_name" => "abc.com",
"message" => "",
"ip" => "10.3.2.12",
"@version" => "1",
"geoip" => {
"country_name" => "China",
"timezone" => "Asia/Shanghai",
"longitude" => 120.1619,
"region_name" => "Zhejiang",
"country_code2" => "CN",
"city_name" => "Hangzhou",
"latitude" => 30.294,
"region_code" => "ZJ",
"continent_code" => "AS",
"ip" => "115.239.211.92",
"location" => {
"lat" => 30.294,
"lon" => 120.1619
},
"country_code3" => "CN"
},
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
内容比较多,这里只截取了我们想要的部分内容进行后续的讲解。
看到默认的情况下,geoip 模块给出的信息还是很多的,但并不是所有的都会用到,各位可以根据自己的需求进行按需配置。
这里可以用到两个关键字:
fileds
:表示只保留自己想要的字段。remove_field
:表示删除某些不想要的字段。
# 2,正式配置
根据我的实际需求,最终我的配置如下:
input {
kafka {
bootstrap_servers => "192.168.3.0:9092"
group_id => "nginx"
consumer_threads => 6
topics => "nginx"
codec => "json"
client_id => "nginx"
}
}
filter {
geoip {
source => "remote_addr"
database => "/etc/logstash/GeoLite2-City.mmdb"
fields => ["country_name","region_name","city_name","location"]
}
}
output {
elasticsearch {
hosts => ["http://192.168.3.0:9200"]
index => "logstash-nginx-%{+YYYY.MM}"
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
只保留了国家,省份,城市,坐标这四个信息,在绘制地理坐标图的时候,已经够用了。
此处需要注意的一个地方就是最后输出的索引名称,必须是以 logstash 开头才行,否则在 kibana 当中绘制的时候,将无法解析到 IP 的坐标信息。
# 3,绘图
创建一个 坐标地图
类型的可视化,然后选择对应的索引,进入到配置界面,指标就用默认的计数,主要的配置是下边的存储桶当中,聚合选择Geohash
,字段选择geoip.location
(如果此处看不到这个字段,应该就是上边注意点没有遵守,需要让索引名称以 logstash 开头),然后点击播放,即可看到对应访问热图呈现在了右侧地图当中了。
绘制地理热图如下:
- 01
- 学习周刊-总第175期-2024年第36周09-05
- 02
- 魔方复原-记录个人理解的教程09-01