2016-08-23 46 views
0

自從幾周以來,我已開始解決ELK tool stack問題。我需要的是獲取包含日期和時間的日誌事件的timestamp,並將其顯示在不同的字段(即:log_timestamp)中。我試過把所有可用的DateStamp選項都拉出來,但是沒有成功。如何在Logstash中將yyyymmdd格式化爲yyyy-mm-dd?

這是我的日誌文件的一行:

20160805 00:00:01.296,GetProvisioning,3,W1oOOW8oj58GhglVjVNg0Ssl4CXA1P,50219--1958335734-1470326399706,成功,GetProvisioningTransactionId-01223,空, W1oOOW8oj58GhglVjVNg0Ssl4CXA1P,恩,CELCOM_MY_DCB

我需要的日誌事件的日期格式yyyy-mm-dd,因爲我無法使用‘日期’神交過濾器。或者有什麼方法可以用上面的yyyymmdd日期格式過濾出來?

編輯: 我在此附上我的個性化圖案和logstash conf的過濾器部分。

圖案我使用其中:LOGTIMESTAMP%{YEAR}%{MONTHNUM}%{MONTHDAY}

過濾標準在logstash CONF:

filter { 

     grok { 
      patterns_dir => ["/home/chamith/work/ELK/logstash/logstash-2.3.4/bin/patterns"] 
      match => { "message" => "%{GREEDYDATA} %{LOGTIMESTAMP:logtimestamp}" } 

     } 
     mutate { 
      add_field => { 
       "timestamp" => "%{LOGTIMESTAMP}" 
      } 
      remove_field => ["logtimestamp"] 
     } 
     date { 
      match => ["logtimestamp", "yyyyMMdd HH:mm:ss"] 
      target => "logtimestamp" 
     }   
    } 

和Kibana輸出:

enter image description here

任何幫助,將不勝感激。

+0

所以你想讓你的'20160805 00:00:01.296'時間戳記作爲這個事件的logstash時間戳嗎? – Fairy

+0

是的,我需要上面的時間戳爲'2016-08-05 00:00:01.296' – Kulasangar

回答

0

您可以使用date過濾器來解析時間戳。如果您想避免爲grok編寫自定義正則表達式,您可以合併這兩個字段並使用date過濾器。

爲了您paticular例如:

grok { 
    match => { "message" => "%{POSINT:time1} %{TIME:time2} ... <Rest goes here> } 
} 
mutate { 
    add_field => { 
     "timestamp" => "%{time1} %{time2}" 
    } 
    remove_field => ["time1", "time2"] 
} 
date { 
    match => { "timestamp" => ""yyyyMMdd HH:mm:ss.SSS } 
} 

這將幾乎得到TIMESTRING並把它放在@timestamp領域。

+3

如果您不想將結果時間字符串放在'@ timestamp'字段中,則可以使用['目標設置](https://www.elastic.co/guide/en/logstash/current/plugins-filters-date.html#plugins-filters-date-target):'target => log_timestamp' – baudsp

+0

@Fairy Thank你的答覆。試用我的自定義模式。但無法得到確切的輸出(yyyy-mm-dd)。我哪裏錯了? – Kulasangar

+0

你的grok模式根本無法匹配,這就是爲什麼你有一個標籤'_grokparsefailure'。你的模式應該是這樣的:'%{POSINT:time1}%{TIME:time2}%{GREEDYDATA}' – Fairy

相關問題