zoukankan      html  css  js  c++  java
  • 安装logstash5.4.1,并使用grok表达式收集nginx日志

    关于收集日志的方式,最简单性能最好的应该是修改nginx的日志存储格式为json,然后直接采集就可以了。

    但是实际上会有一个问题,就是如果你之前有很多旧的日志需要全部导入elk上查看,这时就有两个问题,一是原始日志不是json格式,二是原始日志的时间戳不能识别,如果时间不处理,导入之后所有日志的时间戳将全部是导入时间。

    下面说一下用grok的方式导入原始日志,当然你也可以直接使用这种方式收集nginx日志,这种方式可以保留nginx的原始日志格式。

    1、在官网下载rpm包或者按照guide设置官方repo,安装logstash

    # yum install -y logstash-5.4.1.rpm
    

    2、导出环境变量

    # vim /etc/bashrc
    export PATH=$PATH:/usr/share/logstash/bin
    

    3、安装 logstash-filter-date 插件,这个date插件用来读取原始日志的时间,并存到ES的@timestamp字段

    # logstash-plugin install logstash-filter-date
    

    4、添加一个nginx的pattern

    # rpm -ql logstash | grep patterns
    # cd /usr/share/logstash/vendor/bundle/jruby/1.9/gems/logstash-patterns-core-4.1.0/patterns/
    # ll
    -rw-rw-r-- 1 logstash logstash  1831 May 30 00:41 aws
    -rw-rw-r-- 1 logstash logstash  4831 May 30 00:41 bacula
    -rw-rw-r-- 1 logstash logstash   260 May 30 00:41 bind
    -rw-rw-r-- 1 logstash logstash  2154 May 30 00:41 bro
    -rw-rw-r-- 1 logstash logstash   879 May 30 00:41 exim
    -rw-rw-r-- 1 logstash logstash 10095 May 30 00:41 firewalls
    -rw-rw-r-- 1 logstash logstash  5335 May 30 00:41 grok-patterns
    -rw-rw-r-- 1 logstash logstash  3251 May 30 00:41 haproxy
    -rw-rw-r-- 1 logstash logstash   980 May 30 00:41 httpd
    -rw-rw-r-- 1 logstash logstash  1265 May 30 00:41 java
    -rw-rw-r-- 1 logstash logstash  1087 May 30 00:41 junos
    -rw-rw-r-- 1 logstash logstash  1037 May 30 00:41 linux-syslog
    -rw-rw-r-- 1 logstash logstash    74 May 30 00:41 maven
    -rw-rw-r-- 1 logstash logstash    49 May 30 00:41 mcollective
    -rw-rw-r-- 1 logstash logstash   190 May 30 00:41 mcollective-patterns
    -rw-rw-r-- 1 logstash logstash   614 May 30 00:41 mongodb
    -rw-rw-r-- 1 logstash logstash  9597 May 30 00:41 nagios
    -rw-r--r-- 1 logstash logstash   312 Jun 23 17:47 nginx
    -rw-rw-r-- 1 logstash logstash   142 May 30 00:41 postgresql
    -rw-rw-r-- 1 logstash logstash   845 May 30 00:41 rails
    -rw-rw-r-- 1 logstash logstash   224 May 30 00:41 redis
    -rw-rw-r-- 1 logstash logstash   188 May 30 00:41 ruby
    -rw-rw-r-- 1 logstash logstash   404 May 30 00:41 squid
    

    logstash安装包自带了一些应用的pattern示例,但是没有nginx的,上面那个是我加上去的。

    这是我针对我自己的线上日志格式调试好的grok表达式:

    NGINXACCESS %{IPORHOST:clientip} %{USER:ident} %{USER:auth} [%{HTTPDATE:timestamp}] "%{WORD:verb} %{URIPATHPARAM:request} HTTP/%{NUMBER:httpversion}" "%{DATA:request_body}" %{INT:status} %{INT:body_bytes_sent} "%{DATA:referer}" "%{DATA:agent}" %{DATA:xforwardedfor} %{NUMBER:request_time}  %{NUMBER:upstream_response_time}
    

    这里有一个调试网站:https://grokdebug.herokuapp.com/

    5、添加一个logstash配置

    # vim /etc/logstash/conf.d/nginx_access.conf
    input {
        file {
            path => ["/var/log/nginx/www.opgirl.cn.access.log"]
            start_position => "beginning"
            ignore_older => 0
        }
    }
    
    filter {
        grok {
            match => { "message" => "%{NGINXACCESS}" }
        }
        date {
          match => [ "timestamp","dd/MMM/yyyy:HH:mm:ss Z"]
          target => "@timestamp"
        }
        mutate {
          remove_field => "timestamp"
        }
    }
    
    output {
        elasticsearch {
            hosts => ["192.168.3.56:9200","192.168.3.49:9200","192.168.3.57:9200"]
            index => "logstash-nginx-access-%{+YYYY.MM.dd}"
        }
        #stdout {codec => rubydebug}
    }
    

    6、启动logstash

    # nohup logstash -f /etc/logstash/conf.d/nginx_acces.conf &
    

    7、添加到kibana查看,这时看到的就是日志本身的生成时间,而不是导入ES的时间

  • 相关阅读:
    PHP 小方法之 算生日
    PHP 小方法之 随机生成几位字符串
    PHP 小方法之 过滤参数
    PHP 小方法之 计算两个时间戳之间相差的日时分秒
    PHP 小方法之 仿百度蜘蛛采集
    PHP 小方法之 显示 今天 昨天 上周 上月 近三月 的时间
    PHP保留两位小数的几种方法
    mysql 常用命令(一)
    PHP数据库页面增删查
    PHP数据库登陆注册简单做法
  • 原文地址:https://www.cnblogs.com/keithtt/p/7074002.html
Copyright © 2011-2022 走看看