奇怪的 Logstash 日期解析错误

4

我从Logstash得到以下错误:

{:timestamp=>"2013-12-30T17:05:01.968000-0800", :message=>"无法从字段解析日期", :field=>"message", :value=>"2013-12-30 17:04:59,539.539 INFO 14282:140418951137024 [foo.lib.base.onResults:152] -- /1.12/media - \"getMediaStoreUrl\": , 10.101.AA.BB, 10.101.19.254花费了0.170675992966秒,返回https://foo.s3.amazonaws.com/foo/customerMedia/1009238911/23883995/image?Signature=%2BfXqEdNWtWdhwzi%&*YEGJSDDdDFF%3D&Expires=1388455499&AWSAccessKeyId=NOIMNOTTHATSTUPID>, , >>>", :exception=>java.lang.IllegalArgumentException: Invalid format: "2013-12-30 17:04:59,539.539 INFO 14282:140418951137024..." 格式不正确,无效的是“.539 INFO 14282:140418951137024...”, :level=>:warn}

显然,这个错误与日期格式有关,它的格式如下:
2013-12-30 17:04:59,539.539 INFO 14282:140418951137024...

而我的模式如下:

    date {
        match => ["message", "yyyy-MM-dd HH:mm:ss,SSS"]
    }

我查阅了Joda-Time Library的资料,认为上面的格式是正确的。对于我来说,错误消息中包含重复的SSS(毫秒)部分有些奇怪:",539.539"(由于某种原因,我们的日志会这样输出)。我故意没有在我的模式中加入第二部分“.539”,因为我希望它被忽略。
我还成功地在另一个过滤器中使用了以下模式:
(?<pylonsdate>%{DATESTAMP}\.[0-9]+)

我不确定这个错误是从哪里来的。你有什么想法可以纠正它吗?我需要改变@timestamp吗?任何帮助都将不胜感激!

2个回答

6
错误是因为"message"字段中的其他信息会导致日期api解析错误。例如: INFO 14282:140418951137024 ...
您可以使用grok api获取日期,然后使用date api。
grok { 
     match => ["message","%{DATESTAMP:logtime}\.[0-9]+"]
}
date {
     match => ["logtime","YY-MM-dd HH:mm:ss,SSS"]
}

我已经使用你的日志尝试了这个配置,它对我有效。希望这能帮到你。


我遇到的问题比最初陈述的要复杂。是的,上面的答案可行,谢谢。但是我正在使用自定义模式文件,并且在定义相同的模式方面遇到了困难。感谢您的回答,它肯定帮助我找出了问题的原因。 - Spanky

0

顺便提一句,这可能是与Logstash date 过滤器中的this bug相关。

我有一个更简单的date过滤器,也遇到了同样的错误,在寻找答案时发现了你的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接