轻松掌握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 —— 电子邮件地址
// 如: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        //主机名+端口号,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 一起交流。

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

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值