ELK利用Nginx绘制用户访问高德世界地图

ELK利用Nginx绘制用户访问高德世界地图


简介

当一个网站用户逐渐多起来的时候,如何获取用户来源,本文利用解析nginx日志获取用户IP,使用GeoLite2-City.mmdb地图库将IP转为经纬度,然后在Kibana中使用Coordinate Map绘制用户访问世界地图

过程

1、ELK docker

- [sebp/elk](https://hub.docker.com/r/sebp/elk/) 5.6.2

2、GeoIP

- docker sebp/elk 5.6.2中自带有GeoLite2-City.mmdb库,位于
  /opt/logstash/vendor/bundle/jruby/1.9/gems/logstash-filter-geoip-4.3.1-java/vendor/GeoLite2-City.mmdb目录中

3、配置logstash使用Geoip

- 首先进入docker容器里
  docker exec -it xxxxxxxxx /bin/bash
- 进入logstash配置文件目录
  cd /etc/logstash/conf.d
- 可以看见四个默认文件,分别是02-beats-input.conf  10-syslog.conf  11-nginx.conf  30-output.conf
  02-beats-input.conf 是输入logstash数据来源(一般使用logstash ==> elasticsearch)
  10-syslog.conf 是配置系统日志
  11-nginx.conf  是配置nginx日志
  30-output.conf 是配置日志输出(一般使用elasticsearch ==> kibana)
- 配置02-beats-input.conf文件:
  input {
      beats {
        port => 5044
      }
    } 
- 配置11-nginx.conf:
  filter {
     if [type] == "nginx-access" {
        grok {
         match => { "message" => "%{NGINXACCESS}" }
         }
        geoip {
         source => "clientip"
         target => "geoip"
         add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}" ]
         add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}"  ]
         }
        mutate {
         convert => [ "[geoip][coordinates]", "float"]
        }
    }
    output {
       if [type] == "nginx-access" {
       elasticsearch {
          hosts => ["xxx.xxx.xxx.xxx:9200"]
          manage_template => true
          index => "logstash-*"
          }
        }
    }
  grok:日格式匹配
  geoip:
      source:通过geoip处理的信息,这里我们为了通过ip获取经纬,所以选择clientip作为处理的对象
      target:通过geoip解析出来的地址信息存储在什么字段里,这里指定为geoip
      add_field:将解析出来的经纬存放在geoip.latitude和geoip.longitude中,并且有一个geoip.coordinates是生成的经纬点
      mutate:定义格式为float
  output:
      输出到elasticsearch,host是elk的elasticsearch的IP,默认端口9200
      设置index为logstash-*,这在Kibana中创建index的时候会用到
 - 重启logstash
   service logstash restart 

4、登录Kibana xxx.xxx.xxx.xxx:5601, 创建index为logstash-*的index

- 步骤:
  Management ==> index Patterns ==> create Index Pattern ==>在index Pattern中填写logstash-* ==> Time filter 不变,为@timestamp ==>create

5、将自带英文地图更改为高德地图

- 更改Kibana的配置文件
  cd /opt/kibana/config
  vim kibana.yml
- 在文件最后添加
  tilemap.url: 'http://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}'
  tilemap.options.minZoom: "1"
  tilemap.options.maxZoom: "10"

6、创建后点击Visualize ==> create new Visualize

创建一个新的Visualize 选择Coordinate Map 选择创建好的logstash-*作为index 

- 问题:这时候会出现提示说并没有对应格式的filed能被coordinate map解析,这是因为默认的经纬格式是double类型的,所以我们需要将格式转换为geo_point
- 解决方法:就是将geoip.location转为geo_point格式。这样就能被coordinate map识别

7、生成

点击,选择geoip.location作为经纬。立马就生成了世界访问地图 


你可能感兴趣的:(ELK)