1. 程式人生 > >logstash如何將日誌中字串型別的時間轉化成@timestamp

logstash如何將日誌中字串型別的時間轉化成@timestamp

ELK組合中我們在outputs/elasticsearch中常用的%{+YYYY.MM.dd}來建立索引,而這種寫法是必須要讀@timestamp這個欄位的。預設情況下@timestamp欄位顯示的是當前時間,但我們可能需要記錄的是日誌中的字串型別的時間,所以我們需要把日誌中字串型別的時間覆蓋掉@timestamp中的當前時間。

建立配置檔案 code.conf

input  {

     stdin{}

}

filter {

    grok {

        match => ["message", "%{TIMESTAMP_ISO8601:logdate}"]

    }

    date {

        match => ["logdate", "yyyy-MM-dd HH:mm:ss,SSS"]

        target => "@timestamp"

    }

}

output{

     stdout{

     codec=>rubydebug{}

     }

}

說明:標紅出為日誌中的時間格式,這個根據具體的日誌自行修改或自己開發正則去匹配。

      這裡我用的是logstash自帶的正則。要檢視自帶了哪些正則可檢視檔案:/logstash-2.2.0/vendor/bundle/jruby/1.9/gems/logstash-patterns-core-2.0.2/patterns/grok-patterns

測試:

./logstash -f code.conf

手動輸入:

     2016-08-24 18:05:39,830

 

可以看到@timestamp欄位已經被覆蓋。最後別忘了刪除logdate欄位

     mutate {

        remove => ["logdate"]

    }