2014-12-03 99 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