2014-09-25 136 views
3

我有這個日誌打印日期的格式,看起來像這樣:Logstash自定義日期日誌格式匹配

=   Build Stamp: 10:45:33 On Apr 4 2014   = 

,所以我必須運行神交調試器中的過濾器,但是,如何刪除仍然一無所知字

grok { 
patterns_dir => "./patterns" 
match => { "message" => "%{F_TIMESTAMP:timestamp}" } 
} 

date { 
match => [ "timestamp" , "HH:mm:ss MMM d yyyy" , "HH:mm:ss MMM dd yyyy" ] 
locale => "en" 
} 

模式文件,

F_TIMESTAMP %{TIME} \On %{MONTH} +%{MONTHDAY} %{YEAR} 

我當前輸出的時間戳記爲

10:45:33 2014年4月4日在Grok調試器上。

那麼我怎樣才能使它兼容/匹配logstash @timestamp?

回答

7

您可以提取日期時間的每個部分,並在沒有On關鍵字的情況下合併到另一個字段中。

你可以做到這一點如下:

filter { 
    grok {   
     match => { "message" => "%{F_TIMESTAMP}" } 
    } 
    mutate { 
     add_field => { 
      "timestamp" => "%{time} %{month} %{monthday} %{year}" 
     } 
    } 
    date { 
     match => [ "timestamp" , "HH:mm:ss MMM d yyyy" , "HH:mm:ss MMM dd yyyy" ] 
     locale => "en" 
    } 
    mutate { 
     remove_field => [ "time" ,"month","monthday","year","timestamp"] 
    } 
} 

F_TIMESTAMP %{TIME:time}\s*On\s*%{MONTH:month}\s*%{MONTHDAY:monthday}\s*%{YEAR:year}

其工作對我罰款。

+0

謝謝,這適用於我,但後來我發現小時標記HH在@timestamp「=>」2014-04-04T02:45:33.000Z中顯示不正確,因爲您可以看到HH部分變爲02而不是10.然後,我已經刪除了mutate remove_field標籤,以便實際查看小時部分顯示的時間戳記10是什麼,所以現在它真的讓我感到困惑。 – 2014-09-25 14:38:49

+0

logstash將10更改爲2,因爲我的位置是來自UTC的+8。所以如果我在不同的位置/國家運行這個,它將會是不同的價值。我想我需要爲此添加時區字段。 – 2014-09-25 15:06:45

+0

是的..您需要將其轉換爲當地時間。可以通過ruby腳本完成:'ruby {code =>「event ['@ timestamp'] = event ['@ timestamp']。getlocal」}' – 2014-09-25 17:48:42