美文网首页
使用logstash对nginx的日志正则切割形成图表

使用logstash对nginx的日志正则切割形成图表

作者: 有时右逝 | 来源:发表于2019-04-30 14:44 被阅读0次

    前言

    泪眼迷离,为了实现一个图表功能:nginx的访问ip统计表。小弟磕磕碰碰。摸索了多日。最终此刻成功,特此记录一下。

    底部提供了代码下载,以方便测试构建。

    原因

    原本的日志架构是 filebeat + Elasticsearch+ kibana 。

    采集的日志没做处理。难以阅读。

    可视化很差,无法使用图表功能统计ip访问。

    于是必须修改下日志架构。

    Logstash 的grok功能可以实现 对nginx的access日志切割,划分成多个字段,然后再利用kibanan形成图表,增强可视化。

    目标结构 filebeat + Logstash +Elasticsearch+ kibana

    nginx的日志配置

    image.png

    这里提供下我的参数设置
    配置文件位于 /etc/nginx/nginx.conf

    
    user  nginx;
    worker_processes  1;
    
    error_log  /var/log/nginx/error.log warn;
    pid        /var/run/nginx.pid;
    
    
    events {
        worker_connections  1024;
    }
    
    
    
    
    http {
        include       /etc/nginx/mime.types;
        default_type  application/octet-stream;
    
    log_format  main  '$remote_addr [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" $request_time "$upstream_addr" $upstream_response_time '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    
    
    
        access_log  /var/log/nginx/access.log  main;
    
        sendfile        on;
        #tcp_nopush     on;
    
        keepalive_timeout  65;
    
        #gzip  on;
    
        include /etc/nginx/conf.d/*.conf;
    
        
    }
    
    

    以上配置产生的日志如下

    172.20.0.1 [29/Apr/2019:07:14:58 +0000] "GET /favicon.ico HTTP/1.1" 200 5558 "http://localhost:84/" 0.000 "-" - "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36" "-"
    
    
    

    logstash 的配置

    配置文件为 logstash.conf

    # Sample Logstash configuration for creating a simple
    # Beats -> Logstash -> Elasticsearch pipeline.
    
    input {
      beats {
        port => 5044
      }
    }
    filter {
    
    if 'nginx-access' in [tags]{
    
      grok {
            match =>{ 
              "message" => "^%{IPV4:remote_addr} \[%{HTTPDATE:timestamp}\] \"%{WORD:verb} %{DATA:request} HTTP/%{NUMBER:httpversion}\" %{INT:status} %{INT:body_bytes_sent} \"%{NOTSPACE:http_referer}\" %{NUMBER:request_time} \"%{IPV4:upstream_addr}:%{POSINT:upstream_port}\" %{NUMBER:upstream_response_time} \"%{DATA:http_user_agent}\" \"%{NOTSPACE:http_x_forwarded_for}\""
              }
            remove_field => ["message"]
           
        }
        
    }
          
    
    }
    output {
    
    
      elasticsearch {
        hosts => ["http://elasticsearch的服务器地址:9200"]
        index => "wwfmac-nginx"
      }
    
    
    }
    

    Nginx的日志必须和logstash的正则匹配。否则无法正常切割。

    可以调试的网址。http://grokdebug.herokuapp.com/

    image.png

    最终实现的目标

    image.png image.png

    下载

    以上过程只讲了核心。elk的步骤繁多,无法一一截图配置,

    这里提供一份docker-compose文件,以供测试复现。

    下载地址:

    云盘链接:https://pan.baidu.com/s/1kuO3mksD_43BZyXWjhG8NA 密码:89oe

    有积分的大哥可以支持一波,csdn地址:

    https://download.csdn.net/download/douniwan123654/11153745

    解压之后进入文件夹elk
    运行

    docker-compse up -d
    

    nginx访问地址 127.0.0.1:888
    kibana访问地址: 127.0.0.1:5601

    默认的索引是wwfmac-nginx

    切割出字段后,生成图表非常简单。具体可以参考 https://www.centos.bz/2018/04/%E4%BD%BF%E7%94%A8kibana%E5%88%86%E6%9E%90nginx%E8%AE%BF%E9%97%AE%E6%97%A5%E5%BF%97/

    祝你好运。

    相关文章

      网友评论

          本文标题:使用logstash对nginx的日志正则切割形成图表

          本文链接:https://www.haomeiwen.com/subject/vexvnqtx.html