轻松掌握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 一起交流。

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

发布了88 篇原创文章 · 获赞 434 · 访问量 47万+

猜你喜欢

转载自blog.csdn.net/y277an/article/details/104897900