既然logstash在收集日志的时候可以分析到clientip来自于那个国家城市及其坐标,那么肯定可以通过这些信息绘制在地图上直观的表现出来。awstats是可以做到的,但是nginx的日志格式及内容一旦修改就无法分析了。

        首先有两样必须先安装好:

#/opt/logstash/bin/logstash-plugin install logstash-filter-geoip

安装logstash的geoip插件,使logstash可以获取到国家及城市信息

#yum install GeoIP-data -y

安装GeoIP数据库,如果没有这个包的话可以安装epel的源#yum install epel-release或者到他们的官网去下载http://dev.maxmind.com/geoip/legacy/geolite/

        现在需要将原来的logstash.conf文件中的一些内容修改一下,最终修改为如下:

input {
        file {
                path => "/usr/local/bin/nginx/logs/access.log"
                start_position => "beginning"
                codec => "json"
        }
}
filter {
                geoip {
                        source => "clientip"
                        target => "geoip"
                        database => "/usr/share/GeoIP/GeoLiteCity.dat"
                        add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ]
                        add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}"  ]
                }
                   mutate {
                        convert => [ "[geoip][coordinates]", "float"]
                }
        }
output {        
                elasticsearch {
                        hosts => ["10.4.66.105:9200"]
                        manage_template => true
                        index => "logstash-nginx-%{+YYYY-MM}"
                }
        }

修改好以后,保存退出,在次启动logstash。登录kibana刷新后就可以看到每个城市的访问量在map上显示了。

wKiom1jt6duhpSzjAANAa2iaoQA457.png-wh_50