摘要:我的日志格式如下所示:
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 { }
}
我真的被困在这里了。 需要一些专家帮助。
感谢。
答案 0 :(得分:4)
您指定了小写m
而不是M
。 m
是分钟,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
代替