• Logstash利用GeoIP库显示地图以及通过useragent显示浏览器(四)


      我们通过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" => "30",
                   "city_name" => "Guangzhou",
                    "latitude" => 23.11670000000001,
                   "longitude" => 113.25,
                    "timezone" => "Asia/Chongqing",
            "real_region_name" => "Guangdong",
                    "location" => [
                [0] 113.25,
                [1] 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" => "2883",
         "os" => "Windows 7",
      "major" => "55",
      "minor" => "0",
       "name" => "Chrome",
    "os_name" => "Windows 7",
     "device" => "Other"
        }
  • 相关阅读:
    小米、华为与联想,背后隐含的三种模式(转)
    怎样使用jstack诊断Java应用程序故障(转)
    多线程中的死锁举例与分析(转)
    log4j的性能瓶颈定位与性能优化(org.apache.log4j.spi.RootLogger) (转)
    一个与Log4j相关的死锁(转)
    怎样取消shutdown关机命令?-shutdown命令的使用解析
    对软件体系结构的认识
    39个让你受益的HTML5教程
    5大AR应用窥探移动未来~你见过吗?
    Response.AddHeader使用实例
  • 原文地址:https://www.cnblogs.com/Orgliny/p/5755384.html
Copyright © 2020-2023  润新知