首页 技术 正文
技术 2022年11月23日
0 收藏 665 点赞 2,327 浏览 2121 个字

  我们通过Logstash收集的Nginx Access log中已经包含了客户端IP的数据(remote_addr),但是只有这个IP还不够,要在Kibana的显示请求来源的地理位置还需要借助GeoIP数据库来实现。GeoIP 是最常见的免费 IP 地址归类查询库,同时也有收费版可以采购。GeoIP 库可以根据 IP 地址提供对应的地域信息,包括国别,省市,经纬度等,对于可视化地图和区域统计非常有用。

  另外GeoIP数据文件的准确性和geoip插件的性能还是比较头疼,对性能有要求的可以看下@三斗室写的JRuby 调用 maxmind-java 测试

一、下载GeoIP数据库

# cd /etc/logstash/
# wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
# gzip -d GeoLiteCity.dat.gz

  Linux系统MaxMind提供了GeoIP更新程序,可以自动更新数据库。CentOS可以通过epel源来安装 geoipupdate 。

  修改配置文件 /etc/GeoIP.conf 中 ProductIds GeoLite2-City ,然后直接执行 geoipupdate ,便会自动下载并校验数据库文件。默认数据库文件目录为: /usr/local/share/GeoIP ,可以通过配置项 DatabaseDirectory /etc/logstash/ 更改数据库文件目录。

二、配置logstash,在filter中加入geoip配置即可

if [message] !~ "^127\.|^192\.168\.|^172\.1[6-9]\.|^172\.2[0-9]\.|^172\.3[01]\.|^10\." {    #排除私网地址
geoip {
source => "message" #设置解析IP地址的字段
target => "geoip" #将geoip数据保存到一个字段内
database => "/usr/share/GeoIP/GeoLite2-City.mmdb" #IP地址数据库
}
}

  得到的结果如下:

"geoip" => {
"ip" => "112.90.16.4",
"country_code2" => "CN",
"country_code3" => "CHN",
"country_name" => "China",
"continent_code" => "AS",
"region_name" => "",
"city_name" => "Guangzhou",
"latitude" => 23.11670000000001,
"longitude" => 113.25,
"timezone" => "Asia/Chongqing",
"real_region_name" => "Guangdong",
"location" => [
[] 113.25,
[] 23.11670000000001
]
}

  GeoIP 库数据较多,如果你不需要这么多内容,可以通过 fields 选项指定自己所需要的。下例为全部可选内容:

geoip {
  fields => ["city_name", "continent_code", "country_code2", "country_code3", "country_name", "dma_code", "ip", "latitude", "longitude", "postal_code", "region_name", "timezone"]
}

  需要注意的是:geoip.location 是 logstash 通过 latitude 和 longitude 额外生成的数据。所以,如果你是想要经纬度又不想重复数据的话,需要在geoip中配置: remove_field => [“[geoip][latitude]”, “[geoip][longitude]”] 。

三、利用UserAgent显示浏览器信息

Logstash中的 logstash-filter-useragent 插件可以帮助我们过滤出浏览器版本、型号以及系统版本。

if [user_agent] != "-" {
useragent {
target => "ua"
source => "user_agent"
}
}

使用if语句,只有在 user_agent 字段不为空时才会使用该插件。

target 将过滤出来的 user agent 信息配置到单独的字段中。

source 为必填设置,设置为包含 user agent 的字段。

实例:

user agent:
Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36

通过 logstash-filter-useragent 过滤出来的结果为:

"ua" => {
"patch" => "",
"os" => "Windows 7",
"major" => "",
"minor" => "",
"name" => "Chrome",
"os_name" => "Windows 7",
"device" => "Other"
}
下一篇: node-canvas
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,082
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,557
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,406
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,179
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,815
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,898