【问题标题】:Logstash - Use current date as timestamp dateLogstash - 使用当前日期作为时间戳日期
【发布时间】:2018-07-12 12:14:15
【问题描述】:

我想使用当前日期作为时间戳(日期),因为此信息在我们的日志文件中不可用。 示例 -> main_core.log:

04:00:19.675 [ActiveMQ Task-9] INFO  a.b.c.t.failover.FailoverTransport - Successfully reconnected to ssl://localhost:12345

我想拆分它并使用当前日期作为日期和日志文件中的时间戳。

这可能吗?

感谢和问候

【问题讨论】:

    标签: elasticsearch logstash logstash-grok logstash-configuration


    【解决方案1】:

    您可以添加一个包含日志中缺少的时间戳部分的字段,然后与包含小时的变量连接,并将其用作您的@timestamp 字段。

    下面的过滤器做了这样的事情:

    filter {
        grok {
            break_on_match => false
            match => ["message","%{TIME:hour} %{GREEDYDATA:msg}"]
            tag_on_failure => [ "_grokparsefailure"]
            add_field => { "time" => "%{+YYYY-MM-dd}"}
            add_field => { "timestamp" => "%{time} %{hour}" }
        }
        date {
            target => "@timestamp"
            match => ["timestamp", "YYYY-MM-dd HH:mm:ss.SSS"]
        }
    }
    

    首先,它会将您的消息与 grok 模式匹配,该模式将提取小时并将其保存在字段名称 hour 中,其余部分将保存在字段名称 msg 中,但您可以解析其余部分,如果你想要的。

    然后它将添加一个字段名称time,格式为YYYY-MM-dd,例如2018-07-12

    之后,它将创建一个名为timestamp的字段timehour字段,这将导致2018-07-12 4:00:19.675

    date 过滤器用于将您生成的时间戳用作弹性中的默认时间戳字段,即@timestamp

    这个过滤器的logstash输出是这样的:

    {
     "@timestamp":"2018-07-12T04:00:19.675Z",
     "message":"04:00:19.675 [ActiveMQ Task-9] INFO a.b.c.t.failover.FailoverTransport - Successfully reconnected to ssl://localhost:12345",
     "timestamp":"2018-07-12 04:00:19.675",
     "msg":"[ActiveMQ Task-9] INFO  a.b.c.t.failover.FailoverTransport - Successfully reconnected to ssl://localhost:12345",
     "time":"2018-07-12",
     "@version":"1",
     "hour":"04:00:19.675",
     "host":"logstash-hostname"
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-31
      • 1970-01-01
      • 1970-01-01
      • 2013-03-10
      • 1970-01-01
      • 2014-01-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多