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

2019-04-30  本文已影响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/

祝你好运。

上一篇 下一篇

猜你喜欢

热点阅读