• 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时间的匹配格式

  • 相关阅读:
    pat 甲级 1065. A+B and C (64bit) (20)
    pat 甲级 1064. Complete Binary Search Tree (30)
    pat 甲级 1010. Radix (25)
    pat 甲级 1009. Product of Polynomials (25)
    pat 甲级 1056. Mice and Rice (25)
    pat 甲级 1078. Hashing (25)
    pat 甲级 1080. Graduate Admission (30)
    pat 甲级 团体天梯 L3-004. 肿瘤诊断
    pat 甲级 1099. Build A Binary Search Tree (30)
    Codeforce 672B. Different is Good
  • 原文地址:https://www.cnblogs.com/FengGeBlog/p/10559034.html
Copyright © 2020-2023  润新知