輕鬆掌握Logstash的grok匹配

Logstash的filter插件在7.5.1版本中,有多達46種。介紹filter插件的官網地址,感興趣的話可以自行研究,點此跳轉

本文主要講解filter插件中的grok。通過在filter中使用grok,可以把日誌中的關鍵字快速匹配出來。

grok主要有兩部分:自定義正則表達式和系統預定義的模式表達式。

Grok Debugger在線匹配正則

推薦一款在線匹配正則的網站——Grok Debugger,點此跳轉

該網站界面如下:

grok在線調試

在上面的框輸入你要匹配的字符串,下面的框輸入正則表達式,在最下面就會自動顯示匹配結果。

1. grok自定義正則匹配

grok自定義正則匹配的語法:(?<字段名>正則表達式),示例如下。

自定義正則匹配

正則化的內容是截取"uuid=“和”%或者&&&&"中間的字段。

再來幾組正則化感受下,正則化各語言差不多,寫得多了自然熟悉了

(?<temMsg>(.*)(?=Report)/?) 獲取Report之前的字符
(?<temMsg>(?=Report)(.*)/?) 獲取Report之後的字符
(?<temMsg>(?<=report).*?(?=msg)) 截取report和msg之間的值 不包含report和msg本身
(?<temMsg>(report).*?(?=msg)) 截取包含report但不包含msg
(?<temMsg>(?<=report).*?(msg)) 截取不包含report但包含msg
(?<temMsg>(report).*?(msg|request)) 輸出以report開頭,以msg或者以request結尾的所有包含頭尾信息
(?<temMsg>(report).*?(?=(msg|request))) 輸出以report開頭,以msg或者以request結尾的不包含頭尾信息

2. grok模式表達式

grok模式表達式的語法是%{模式類型:變量名},如%{IP :ip_from}將匹配一段IP地址,並且命名爲ip_from。其中,變量名不是必須的。示例如下:

模式表達式匹配

爲了方便理解,下面列舉一些常用的grok模式,更多grok模式點此跳轉github鏈接。常用的模式匹配,都在這個鏈接裏的"grok-patterns"子目錄。

IP —— 匹配IP地址,IPv4和IPv6都可以

// ipv4如:127.0.0.1
// ipv6如:FB21:1233:55B2:AA44:12B8:6761:890F:AB31

MAC —— MAC地址

// 如:08:00:20:0A:8C:6D

DATA —— 相當於正則的.*?

// . 匹配除\n和空格以外的任何字符
// * 相當於0-正無窮
// ? 爲懶惰模式,匹配到第一個就結束

// 實測DATA用在正則化的最後是無法匹配到任何字符的,這個時候可以考慮用WORD等代替。

WORD —— 等價於 \b\w+\b,匹配包含數字和大小寫的字符串

// 如:hello_world、String、 I_love_code

QUOTEDSTRING 或 QS —— 帶引號的字符串

// 如 "hey, girls!"

EMAILADDRESS —— 電子郵件地址

// 如:[email protected]

EMAILLOCALPART —— 匹配電子郵件的用戶名部分

/*
* 首位由大小寫字母組成,其他位由數字、大小寫及特殊字符(_.+-=\:\)組成的字符串
* 注意,國內的QQ純數字郵箱賬號是無法匹配的

// 如:[email protected] 匹配 admin

USERNAME 或 USER —— 匹配用戶名

/*
* 由數字、大小寫及特殊字符(._-)組成的字符串
*/

// 如:admin、ec2-user

數字類型格式

INT         //正整數、0、負整數都可,如 -1234、0、12412
BASE10NUM 或 NUMBER  //十進制數,包括整數和小數,如: 345、 3.1415926
BASE16NUM   //十六進制整數,如:0xa12F、0xDc34
BASE16FLOAT //十六進制數字,包括整數和小數

UUID —— 標準唯一識別碼

// 如: 9584dba3-fe26-418d-8625-2d71a5d78049

主機名稱格式

HOSTNAME      //主機名,如www.baidu.com
IPORHOST        // IP或者主機名稱
HOSTPORT        //主機名+端口號,127.0.0.1:8080

PATH —— 路徑格式的字符串

// 如: /home/ec2-user/docker_config

日期時間表達式

MONTH       //月份名稱,如:Jan、January
MONTHNUM    //月份數字,如:06、1、12
MONTHDAY    //日期數字,如:15、29、31、09
DAY         //星期幾,如:Tues、Friday
YEAR        //年份數字,如:2017、1995
HOUR        //小時數字,如:24、13
MINUTE      //分鐘數字,如:13、59
SECOND      //秒鐘數字,如:12、54
TIME        //時間,如:12:34:12
DATE_US     //美國日期格式,如:10-15-1982、10/15/1982
DATE_EU     //歐洲日期格式,如:15-10-1982、15.10.1982
TIMESTAMP_ISO8601 //ISO8601時間戳格式,如:2016-07-03T00:34:06+08:00

LOGLEVEL —— 日誌等級

// 如:Info、Error、Warning

最後,限於筆者經驗水平有限,歡迎讀者就文中的觀點提出寶貴的建議和意見。如果想獲得更多的學習資源或者想和更多的是技術愛好者一起交流,可以關注我的公衆號『全菜工程師小輝』後臺回覆關鍵詞領取學習資料、進入後端技術交流羣和程序員副業羣。同時也可以加入程序員副業羣Q羣:735764906 一起交流。

哎呀,如果我的名片丟了。微信搜索“全菜工程師小輝”,依然可以找到我

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章