首页 > 解决方案 > Logstash 6.2.4 - 匹配时间不默认为当前日期

问题描述

我正在使用具有以下配置的 logstash 6.2.4:

input {
  stdin { }
}


filter {
  date {
    match => [ "message","HH:mm:ss" ]
  }
}

output {
  stdout { }
}

使用以下输入:

10:15:20

我得到这个输出:

{
       "message" => "10:15:20",
      "@version" => "1",
          "host" => "DESKTOP-65E12L2",
    "@timestamp" => 2019-01-01T09:15:20.000Z
}

我只有一个时间信息,但想将其解析为当前日期。
请注意,当前日期是 2019 年 3 月 1 日,所以我猜这2019-01-01是某种默认日期?

如何解析时间信息并向其中添加当前日期信息?

replace根据文档,我对任何或其他块并不真正感兴趣,解析时间应默认为当前日期。

标签: logstashlogstash-grok

解决方案


您需要添加一个新字段,将当前日期与包含您的时间信息的字段合并,在您的示例中是该message字段,然后您的date过滤器将需要针对这个新字段进行测试,您可以使用以下配置执行此操作。

filter {
    mutate {
       add_field => { "current_date" => "%{+YYYY-MM-dd} %{message}" }
    }
    date {
        match => ["current_date", "YYYY-MM-dd HH:mm:ss" ]
    }
}

结果将是这样的:

{
    "current_date" => "2019-03-03 10:15:20",
      "@timestamp" => 2019-03-03T13:15:20.000Z,
            "host" => "elk",
         "message" => "10:15:20",
        "@version" => "1"
}

推荐阅读