Logstash常使用grok語法來解析資料,可以再匯入其它平台之前對資料做拆分,建立正確的格式。
grok是使用以下的方式處理log,pattern就是你希望解析後的格式,tag就是你取的名字
%{PATTERN:tag}
可以到這個網址去實作https://grokdebugger.com/
Pattern
NUMBER | 處理數字 |
DATA | 處理字串 |
NOTSPACE | 非空格內容 |
IP | 處理IPv4 or IPv6 |
MONTHNUM | 處理月份 |
MONTHDAY | 處理日 |
TIME | 處理時間 |
GREEDYDATA | 處理多個字串除了換行 |
假設今天有一段log
04/18-00:59:45.385191 [**]
起始的04是月份,所以我們使用%{MONTHNUM:month},請記住pattern要使用大寫。
再來遇到一個”/”,log中不相關的內容我們就可以照抄,不過要注意有些字元需要使用”\”跳脫,例如”[“, “]”,一個簡單的小技巧就是如果不確定需不需要跳脫,都加”\”就好了。
所以我們parse的內容就會變成
%{MONTHNUM:month}/
接下來18是日期,所以使用%{MONTHDAY:day},遇到了一個無關的”-“
%{MONTHNUM:month}/%{MONTHDAY:day}-
再來00:59:45.385191剛好可以直接被TIME這個pattern match,所以結果是
%{MONTHNUM:month}/%{MONTHDAY:day}-%{TIME:time}
最後遇到一個空格還有[**],剛剛提到”[]”這兩個都需要跳脫,另外兩個星星其實在這個log中沒什麼意義,你可以選擇照打,也可以給他一個pattern但不給他tag,這樣parse後的結果就不會出現,等於我們忽略掉了。我們使用DATA這個pattern來給**。
最終的結果
%{MONTHNUM:month}/%{MONTHDAY:day}-%{TIME:time} \[%{DATA}\]