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}


浙公网安备 33010602011771号