2014-12-03 95 views
4

我想分析常见的Apache访问日志文件,这是这样的:Logstash:解析Apache访问日志的时间戳导致解析失败

::1 - - [02/Mar/2014:15:36:43 +0100] "GET /index.php HTTP/1.1" 200 3133 

这是我的滤波部分:

grok { 
     match => ["message", "%{COMMONAPACHELOG}"] 
} 
date { 
    match => ["timestamp", "dd/MMM/yyyy:HH:mm:ss Z"] 
} 

所有字段是得到认可,但不是时间戳。控制台上的输出如下:

Failed parsing date from field {:field=>"timestamp", :value=>"02/Mar/2014:15:36:43 +0100", :exception=>java.lang.IllegalArgumentException: Invalid format: "02/Mar/2014:15:36:43 +0100" is malformed at "Mar/2014:15:36:43 +0100", :level=>:warn} 

我已经检查了日期过滤器的文档。它依赖于DateTimeFormat

我做错了什么?看不到错误。

+1

适用于我;我得到2014-03-02T14:36:43.000Z作为此确切输入和配置的时间戳。您的默认区域设置是否为非英文区域,因此您需要[设置日期过滤器的区域设置](http://logstash.net/docs/1.4.2/filters/date#locale)? – 2014-12-04 06:32:56

+0

谢谢,工作正常。如果你想要,你可以写这个答案,所以我可以接受它。 – tester 2014-12-04 19:08:05

回答

7

is malformed at "Mar/2014:15:36:43 +0100"错误消息的一部分指示时间戳分析程序与月份名称有问题。这表明默认语言环境是英语以外的语言(特别是第三个月不会缩写为“Mar”的语言)。这可以通过明确地设置用于解析的区域设置来解决:

filter { 
    date { 
    ... 
    locale => "en" 
    } 
} 
+0

apache访问日志是否总是使用'en'作为区域设置? – 2015-09-03 04:57:02