zoukankan      html  css  js  c++  java
  • 06_去除不需要的字段以及ELK时间轴问题

    去除字段只能去除_source中的,不是_source内的无法去除。

      去除不必要的字段,不仅可以节省ES的存储内容,同时因为节省了ES的内容,可以加速搜索的速度

    Logstash配置去除不需要的字段

    filter {
        grok {
            match => {
                "message" => '(?<clientip>[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}) - - [(?<requesttime>[^ ]+ +[0-9]+)] "(?<requesttype>[A-Z]+) (?<requesturl>[^ ]+) HTTP/d.d" (?<status>[0-9]+) [0-9]+ "[^"]+" "(?<ua>[^"]+)" "(?<realip>[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}),? [^"]+"'
            }
            remove_field => ["message", "@version"]
        }
    }

    重启logstash之后,再次在kibana中查看数据,已经没有了@version和message

    table

    当然如果没有删除掉之前的数据的话,左边栏依然还是有@version和message,但是新的数据中已经没有了@version 和message

    如果这一步看到的字段信息比我少是正常的,因为我这里已经开始采用filebeat去收集日志了,filebeat相对于logstash更加轻量级,具体的使用会在后面说明。

    ELK时间展示问题

    Kibana自带的@timestamp是日志发送到ES的时间,所以会跟真正日志中记录的时间有出入

    timestamp

     

    默认ELK时间轴

    1. 以发送日志的时间为准

    2. Nginx本身记录了用户访问的时间

    3. 分析Nginx上的日志以用户访问时间为准,而不应该以发送日志的时间

     

    Logstash分析所有的Nginx日志

    input {
        file {
            path => "/var/log/nginx/access.log"
            start_position => "beginning"
            sincedb_position => "/dev/null"
        }
    }

    此时再次查看@timestamp

    stamp

    所有的时间都为刚才日志发送的时间,如果通过这样的时间去分析日志,是十分不准确的,所以我们可以将timestamp的时间修改为之前自己匹配的requesttime即刻显示为正常时间

    在filter中添加如下信息

      date {
        match => ["requesttime", "dd/MMM/yyyy:HH:mm:ss Z"]
        target => "@timestamp"
      }

    此时再次查看,时间与日志中一致

    time

    不同的时间格式,覆盖的时间格式要对应

    1. 20/Feb/2019:16:13:09 -------> dd/MMM/yyyy:HH:mm:ss

    2. 2019-09-20 16:14:23.230 --------> yyyy-MM-dd HH:mm:ss.SSS

     

  • 相关阅读:
    iOS:图片相关(19-05-09更)
    iOS:文字相关(19-01-08更)
    iOS:通信录(完成)(18-01-18更)
    Swift 中的Closures(闭包)详解
    Swift 中的高阶函数和函数嵌套
    Swift API设计原则
    Swift下CoreData的使用
    iOS 使用贝塞尔曲线绘制路径
    iOS CALayer使用
    iOS 多线程的使用
  • 原文地址:https://www.cnblogs.com/xll970105/p/11559455.html
Copyright © 2011-2022 走看看