2015-10-15 23 views
0

如果您正在將日誌回填到logstash中,您應該嘗試以某種方式抽取適當的時間戳。否則,他們會被分配到logstash收到日誌行的時間。Logstash不會更新apache日誌中的@timestamp

這是使用date過濾器一樣實現:

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

但不幸的是,這並不爲我工作。

所以我有以下的Apache的logline:

10.80.161.251 - - [15/Oct/2015:09:13:45 +0000] "- -" "POST /xxx HTTP/1.1" 200 696 29416 "-" "xxx" 4026 

及以下模式

ACCESS_LOG %{IPORHOST:clientip} %{USER:ident} %{USER:auth} \[%{HTTPDATE:[@metadata][timestamp]}\] "(?:TLSv%{NUMBER:tlsversion}|-) (?:%{NOTSPACE:cypher}|-)" "(?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest})" %{NUMBER:response} (?:%{NUMBER:bytes_in}|-) (?:%{NUMBER:bytes_out}|-) %{QS:referrer} %{QS:agent} %{NUMBER:tts} 

而下面logstash配置

# INPUTS 
input { 
    file { 
     path => '/var/log/test.log' 
     type => 'apache-access' 
    } 
} 

# filter/mix/match 
filter { 
    if [type] == 'apache-access' { 
     grok { 
      patterns_dir => [ '/root/logstash-patterns' ] 
      match => [ "message", "%{ACCESS_LOG}" ] 
     } 

     if !("_grokparsefailure" in [tags]) { 
      mutate { add_field => ["timestamp_submitted", "%{@timestamp}"] } 

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

# now output 
output { 
    stdout { codec => rubydebug } 
} 

我做錯了這裏。我嘗試添加時區,區域和什麼不是。它仍然不起作用。任何幫助非常感謝(如果你碰巧在索非亞,保加利亞,還可以選擇一杯飲料)。

回答

0

自我提醒:閱讀更仔細地

這裏的問題是不匹配對正確的字段。

因爲Apache的默認模式的記錄來自的logline時間戳是[@metadata][timestamp]而不是timestamp

所以日期匹配過濾器應該是:

date { 
    match => [ "[@metadata][timestamp]", "dd/MMM/yyyy:HH:mm:ss Z" ] 
}