logstash關於date時間處理的幾種方式總結


1、第一種,直接在配置文件中自定義時間格式

這是tomcat配置文件中的一段日志時間配置,按照這樣的配置,那么輸出的日志是這樣子的:

然后你繼續在logstash中這樣子配置

此時logstash就不會報"_dateparsefailed"錯誤了。

這種形式在nginx、apache等web服務器中配置是最好的,也比較方便分析。

2、第二種,帶有中括號的(其實跟上面是一回事)

日志本身輸出是這樣子的

[07/Feb/2018:16:24:19 +0800]

帶有一對中括號

那么在grok插件中這樣子定義就行:

\[%{HTTPDATE:timestamp}\]

date插件可以直接轉換,如下:

最后的效果是這樣子的

這樣子也不會報錯

3、ISO8601形式

在日志文件中原生日志是這樣子的:

2019-03-19 13:08:07.782

重點是后面的”.782“,后面附加以毫秒為單位的。

 那么grok插件中可以這樣子定義匹配的規則:

此時date插件可以這樣子定義:

 date {
                match => [ "access_time","MMM  d HH:mm:ss", "MMM dd HH:mm:ss", "ISO8601"]
        }

上面的形式沒有寫錯,直接復制粘貼到配置文件即可

最后匹配如下:

這樣子也不會報”_dateparsefailed“錯誤。

最后附加一張時間匹配規則表,平時可做參考

4、根據時間戳來轉換數據。

在mysql的慢查詢日志中收集時,由於某些情況下只能根據時間戳來確定時間,那么我們就必須使用轉換的方案了。主要是將時間戳轉換成UNIX風格的時間,比如:

mysql慢查詢日志的時間是這樣子的:

那么我們在logstash的配置文件中使用的date插件這樣子來寫:

這樣子就可以匹配成功了。

上面的“timestamp_mysql”是我在grok插件中的匹配后的時間賦值,比如:

%{NUMBER:timestamp_mysql};

4、ISO8601形式

時間日志:

2018-02-09T10:57:42+08:00

此時在grok中可以這么寫:

grok {
        match => { "message" ; "%{TIMESTAMP_ISO8601:localtime}
}

而在時間轉存到@timestamp有兩種寫法可以供使用

date {
        match => ["localtime", "yyyy-MM-dd'T'HH:mm:ssZZ"]
        target => "@timestamp"
}

或者是

date {
        match => ["localtime", "ISO8601"]
    }

都可以實現ISO8601時間的匹配格式

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM