2

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

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 { }
}

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

谢谢。

4

3 回答 3

4

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

尝试:

yyyy/MM/dd-HH:mm:ss.SSS
于 2013-08-06T07:57:19.540 回答
1

在从命令行启用详细模式 (-vv) 之前,从错误中不明显的是“日期”过滤器正在使用 JodaTime 库。就我而言,我使用上一步中的正则表达式来解析日期和时间。这显然行不通,因为这不是 JodaTime 所期望的。对于允许的日期时间格式,您应该查看DateTimeFormat 文档

于 2013-10-05T20:23:57.187 回答
0

尝试

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

反而

于 2013-06-03T12:38:28.167 回答