logstash grok 语法范例

Grok 是 Logstash 最重要的插件。它的主要作用就是将文本格式的字符串,转换成为具体的结构化的数据,配合正则表达式使用。

grok模式表达式的语法是%{模式类型:变量名},如%{IP:ip_addr}将匹配一段IP地址,并且命名为ip_addr。其中,变量名不是必须的。示例如下:

 

 

 

正则表达式测试

可以用kibana dev tools下的Grok Debgger测试,示例

 

 

带特殊字符的,用转义符 \ 转义

 

 

为了方便理解,下面列举一些常用的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  : 电子邮件地址

// 如:admin@example.com

  

EMAILLOCALPART  :  匹配电子邮件的用户名部分

/*
* 首位由大小写字母组成,其他位由数字、大小写及特殊字符(_.+-=\:\)组成的字符串
* 注意,国内的QQ纯数字邮箱账号是无法匹配的

// 如:admin@example.com 匹配 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        //主机名+端口号

 

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

 

完整示例

2020-11-02 18:20:29 [INF] [client.go:64] From=110.176.178.107:20518, URI=/v2/getBulletin/100055/203/10.82.231.246/2 GetBulltin cmd=HGet


%{TIMESTAMP_ISO8601:time} \[%{WORD:loglevel}\] \[%{DATA:client}\] From=%{HOSTPORT:address}, URI=%{PATH:url} %{WORD:func} cmd=%{WORD:method}

 

 

posted @ 2021-09-23 11:49  羊脂玉净瓶  阅读(667)  评论(0)    收藏  举报