Logstash日期解析错误

时间:2013-05-13 11:35:29

标签: parsing elasticsearch grok logstash

摘要:我的日志格式如下所示:

2013/05/09-05:19:16.772

现在我想使用logstash并将这些日志发送到弹性搜索。但问题是我希望时间戳值应该是日志的值而不是当前时间。

因此,我写了以下内容。这说不出来:

Invalid format: "2013/05/09-05:19:16.876" is malformed at "/05/09-05:19:16.876", :backtrace=>["org.joda.time.format.DateTimeFormatter.parseDateTime(DateTimeFormatter.java:866)"

我的conf文件是:

input {
  stdin {
      type => "stdin-type"
  }
}

filter {
  grok {
    type => "stdin-type"
    patterns_dir=>["./patterns"]
    pattern => "%{PARSE_ERROR}"
    add_tag=>"%{type1},%{type2},%{slave},ERR_SYSTEM"
  }

  date {
    type => "stdin-type"
    match=>["ts","yyyy/mm/dd-HH:mm:ss.SSS"]
    locale=>"en"
  }

  mutate {
    type=>"stdin-type"
    replace => ["@message", "%{message}" ]
    replace => ["@timestamp", "%{ts}" ]
  }
}

output {
  stdout { debug => true debug_format => "json"}
  elasticsearch { }
}

我真的被困在这里了。 需要一些专家帮助。

感谢。

3 个答案:

答案 0 :(得分:4)

您指定了小写m而不是Mm是分钟,M是几个月。

尝试:

yyyy/MM/dd-HH:mm:ss.SSS

答案 1 :(得分:1)

在从命令行启用详细模式(-vv)之前,错误中不容易看出的是“日期”过滤器is using the JodaTime library。就我而言,我使用前一步骤中的正则表达式来解析日期和时间。这显然不起作用,因为它不是JodaTime所期望的。对于允许的日期时间格式,您应该查看DateTimeFormat documentation

答案 2 :(得分:0)

尝试

YYYY/MM/dd-HH:mm:ss.SSS

代替