Logstash:解析apache访问日志的时间戳会导致解析失败

tes*_*ter 4 logstash logstash-grok

我想解析常见的apache访问日志文件,这是:

::1 - - [02/Mar/2014:15:36:43 +0100] "GET /index.php HTTP/1.1" 200 3133
Run Code Online (Sandbox Code Playgroud)

这是我的过滤器部分:

grok {
      match => ["message", "%{COMMONAPACHELOG}"]
}
date {
    match => ["timestamp", "dd/MMM/yyyy:HH:mm:ss Z"]
}
Run Code Online (Sandbox Code Playgroud)

所有字段都被识别,但不是时间戳.控制台上的输出如下:

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}
Run Code Online (Sandbox Code Playgroud)

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

我做错了什么?看不出错误.

Mag*_*äck 7

is malformed at "Mar/2014:15:36:43 +0100"错误消息的一部分表示时间戳解析器具有月份名称的问题.这表明默认语言环境不是英语(特别是第三个月没有缩写为"Mar"的语言).这可以通过显式设置用于日期过滤器解析的语言环境来解决:

filter {
  date {
    ...
    locale => "en"
  }
}
Run Code Online (Sandbox Code Playgroud)