• 对于注定会优秀的人来说,他所需要的,只是时间----博主
  • 手懒得,必受贫穷,手勤的,必得富足----《圣经》
  • 帮助别人,成就自己。愿君在本站能真正有所收获!
  • 如果你在本站中发现任何问题,欢迎留言指正!
  • 宝剑锋从磨砺出,梅花香自苦寒来!
  • 本站开启了防爆破关小黑屋机制,如果您是正常登录但被关进小黑屋,请联系站长解除!

<十二>ELK-学习笔记–logstash配置geoip画访问地域热图

ELK eryajf 2周前 (12-02) 88°C 已收录 0个评论
本文预计阅读时间 8 分钟

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/

然后在配置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}"
#  }
#}

通过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"
         },
}

内容比较多,这里只截取了我们想要的部分内容进行后续的讲解。

看到默认的情况下,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}"
  }
}

只保留了国家,省份,城市,坐标这四个信息,在绘制地理坐标图的时候,已经够用了。

此处需要注意的一个地方就是最后输出的索引名称,必须是以logstash开头才行,否则在kibana当中绘制的时候,将无法解析到IP的坐标信息。

3,绘图

创建一个 坐标地图类型的可视化,然后选择对应的索引,进入到配置界面,指标就用默认的计数,主要的配置是下边的存储桶当中,聚合选择Geohash,字段选择geoip.location(如果此处看不到这个字段,应该就是上边注意点没有遵守,需要让索引名称以logstash开头),然后点击播放,即可看到对应访问热图呈现在了右侧地图当中了。

绘制地理热图如下:

image-20191202110445187


weinxin
扫码订阅本站,第一时间获得更新
微信扫描二维码,订阅我们网站的动态,另外不定时发送WordPress小技巧,你可以随时退订,欢迎订阅哦~

二丫讲梵 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明<十二>ELK-学习笔记–logstash配置geoip画访问地域热图
喜欢 (0)
[如果想支持本站,可支付宝赞助]
分享 (0)
eryajf
关于作者:
学无止境,我愿意无止境学。书山有路,我愿意举身投火,淬炼成金!

您必须 登录 才能发表评论!