搭建ELK(ElasticSearch+Logstash+Kibana)日誌分析系統(十四) logstash grok 正則解析日誌

摘要
這一節補充一下logstash使用grok正則解析日誌


Grok 是 Logstash 最重要的插件。通過在filter中使用grok,可以把日誌中的關鍵字匹配出來。

grok正則主要有兩部分:

  • 一是grok自帶的grok模式表達式,即是grok預定義好的一些表達式,可以匹配一些常見的字符串,如ipv4、ipv6、mac地址等
  • 二是通過正則表達式來匹配,grok支持約120種正則表達式,詳見120種grok正則

1、Grok Debugger在線匹配正則

在我們正式我們一一介紹之前,給大家推薦一款在線匹配正則的網站Grok Debugger,這個網站必須通過https訪問,而且需要FQ,至於如何FQ,各位自行百度。

該網站界面如下:

在最上面一個框輸入你要匹配的字符串,第二個框輸入正則表達式,在最下面就會自動顯示匹配結果,真的很方便哦。在接下來的教程裏,我也使用它來做示例。


2、grok自定義正則匹配

自定義正則的語法爲:(?<field_name>the pattern here),即是(?<字段名>正則表達式),示例如下

非常簡單吧,只要把準備好的正則放進去,再給他取個字段名就行了。
但是寫正則確實是個很麻煩的事情,所以grok插件已經預定義好了一些匹配模式。我們接着來看。


3、grok模式表達式

Grok模式的語法是%{SYNTAX:SEMANTIC},如%{ IP :my_ip }將匹配一段IP地址,並且命名爲my_ip,示例如下:

然後我詳細介紹一下所有的grok模式表達式——


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

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

2) MAC —— MAC地址

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

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

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

/**
* 也就是說,DATA能在一行裏匹配任何不以\n結束的字符,差不多就是一行了...
*/

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

//如:hello_world、String、 I_love_code

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

//如:"Hello husen""hey, girls!"

6 ) NOTSPACE —— 相當於\S+,不帶任何空格的字符串

// \S 是匹配除空格外的任何字符, + 代表 1-正無窮
//如: developments、 china

7 ) SPACE —— 相當於\s*,只能匹配空格字符串

// \s 匹配空格,包括換行和空格, * 代表0-正無窮
//如: (你猜這裏有幾個空格)

8 ) EMAILADDRESS —— 電子郵件地址

//如:[email protected]

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

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

如:[email protected] 匹配 admin

10 ) USERNAME 或 USER —— 匹配用戶名

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

//如:husen、admin、xiao.ming

11) 數字類型格式

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

12) UUID —— 標準唯一識別碼

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

13) 主機名稱格式

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

14) PATH —— 路徑格式的字符串

//如: /home/husen/test.log, D:\Desktop\elk\elk中文指南

15) URI地址格式

URIPROTO    //URI協議,如:https, sftp
URIHOST     //URI主機,如:www.hemingsheng.cn, 115.159.64.86:8080
URIPATH     // URI路徑,如:/home.html, /web/login.php
URIPARAM    //GET形式的URI參數,如:?
username=qq_123&goto=homepage
URIPATHPARAM    
//URI路徑+GET參數,如: /web/login.phpusername=qq_123&goto=homepage
URI         
//完整的URI,如:www.hemingsheng.cn/web/login.php?username=qq_123&goto=homepage

16) 日期時間表達式

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
DATE        //日期,美國日期%{DATE_US}或者歐洲日期%{DATE_EU}
DATESTAMP   //完整日期+時間,如:07-03-2016 00:34:06
HTTPDATE    //http默認日期格式,如:03/Jul/2016:00:36:53 +0800
TIMESTAMP_ISO8601 //ISO8601時間戳格式,如:2016-07-03T00:34:06+08:00

17) LOGLEVEL —— 日誌等級

//如:Info、Error、Warning
發佈了57 篇原創文章 · 獲贊 38 · 訪問量 23萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章