zoukankan      html  css  js  c++  java
  • logstash关于date时间处理的几种方式总结

    1、第一种,直接在配置文件中自定义时间格式

    这是tomcat配置文件中的一段日志时间配置,按照这样的配置,那么输出的日志是这样子的:

    然后你继续在logstash中这样子配置

    此时logstash就不会报"_dateparsefailed"错误了。

    这种形式在nginx、apache等web服务器中配置是最好的,也比较方便分析。

    2、第二种,带有中括号的(其实跟上面是一回事)

    日志本身输出是这样子的

    [07/Feb/2018:16:24:19 +0800]

    带有一对中括号

    那么在grok插件中这样子定义就行:

    [%{HTTPDATE:timestamp}]

    date插件可以直接转换,如下:

    最后的效果是这样子的

    这样子也不会报错

    3、ISO8601形式

    在日志文件中原生日志是这样子的:

    2019-03-19 13:08:07.782

    重点是后面的”.782“,后面附加以毫秒为单位的。

     那么grok插件中可以这样子定义匹配的规则:

    此时date插件可以这样子定义:

     date {
                    match => [ "access_time","MMM  d HH:mm:ss", "MMM dd HH:mm:ss", "ISO8601"]
            }

    上面的形式没有写错,直接复制粘贴到配置文件即可

    最后匹配如下:

    这样子也不会报”_dateparsefailed“错误。

    最后附加一张时间匹配规则表,平时可做参考

    4、根据时间戳来转换数据。

    在mysql的慢查询日志中收集时,由于某些情况下只能根据时间戳来确定时间,那么我们就必须使用转换的方案了。主要是将时间戳转换成UNIX风格的时间,比如:

    mysql慢查询日志的时间是这样子的:

    那么我们在logstash的配置文件中使用的date插件这样子来写:

    这样子就可以匹配成功了。

    上面的“timestamp_mysql”是我在grok插件中的匹配后的时间赋值,比如:

    %{NUMBER:timestamp_mysql};

    4、ISO8601形式

    时间日志:

    2018-02-09T10:57:42+08:00

    此时在grok中可以这么写:

    grok {
            match => { "message" ; "%{TIMESTAMP_ISO8601:localtime}
    }

    而在时间转存到@timestamp有两种写法可以供使用

    date {
            match => ["localtime", "yyyy-MM-dd'T'HH:mm:ssZZ"]
            target => "@timestamp"
    }

    或者是

    date {
            match => ["localtime", "ISO8601"]
        }

    都可以实现ISO8601时间的匹配格式

  • 相关阅读:
    UVA657 The die is cast(DFS、BFS)
    三分
    【洛谷P6105】iepsmCmq
    【CF613D】Kingdom and its Cities
    【洛谷P4294】游览计划
    【洛谷P3500】TESIntelligence Test
    【洛谷P6189】[NOI Online 入门组] 跑步
    【洛谷P2973】Driving Out the Piggies
    【洛谷P3164】和谐矩阵
    【洛谷P4161】游戏
  • 原文地址:https://www.cnblogs.com/FengGeBlog/p/10559034.html
Copyright © 2011-2022 走看看