介绍
Grok 意味 “通过感觉会意”
他比正则更高级一些,在语法上略有不同,不过也是换汤不换药,对于熟悉正则的同学来说,Grok也不会很难。
常用表达式
表达式标识 |
名称 |
详情 |
匹配例子 |
---|---|---|---|
USERNAME 或 USER |
用户名 |
由数字、大小写及特殊字符(._-)组成的字符串 |
1234、Bob、Alex.Wong |
EMAILLOCALPART |
用户名 |
首位由大小写字母组成,其他位由数字、大小写及特殊字符(_.+-=:)组成的字符串。注意,国内的QQ纯数字邮箱账号是无法匹配的,需要修改正则 |
windcoder、windcoder_com、abc-123 |
EMAILADDRESS |
电子邮件 |
windcoder@abc.com、windcoder_com@gmail.com、abc-123@163.com |
|
HTTPDUSER |
Apache服务器的用户 |
可以是EMAILADDRESS或USERNAME |
|
INT |
整数 |
包括0和正负整数 |
0、-123、43987 |
BASE10NUM 或 NUMBER |
十进制数字 |
包括整数和小数 |
0、18、5.23 |
BASE16NUM |
十六进制数字 |
整数 |
0x0045fa2d、-0x3F8709 |
WORD |
字符串 |
包括数字和大小写字母 |
String、3529345、ILoveYou |
NOTSPACE |
不带任何空格的字符串 |
||
SPACE |
空格字符串 |
||
QUOTEDSTRING 或 QS |
带引号的字符串 |
“This is an apple”、’What is your name?’ |
|
UUID |
标准UUID |
550E8400-E29B-11D4-A716-446655440000 |
|
MAC |
MAC地址 |
可以是Cisco设备里的MAC地址,也可以是通用或者Windows系统的MAC地址 |
|
IP |
IP地址 |
IPv4或IPv6地址 |
127.0.0.1、FE80:0000:0000:0000:AAAA:0000:00C2:0002 |
HOSTNAME |
IP或者主机名称 |
||
HOSTPORT |
主机名(IP)+端口 |
127.0.0.1:3306、api.windcoder.com:8000 |
|
PATH |
路径 |
Unix系统或者Windows系统里的路径格式 |
/usr/local/nginx/sbin/nginx、c:windowssystem32clr.exe |
URIPROTO |
URI协议 |
http、ftp |
|
URIHOST |
URI主机 |
windcoder.com、10.0.0.1:22 |
|
URIPATH |
URI路径 |
//windcoder.com/abc/、/api.php |
|
URIPARAM |
URI里的GET参数 |
?a=1&b=2&c=3 |
|
URIPATHPARAM |
URI路径+GET参数 |
/windcoder.com/abc/api.php?a=1&b=2&c=3 |
|
URI |
完整的URI |
https://windcoder.com/abc/api.php?a=1&b=2&c=3 |
|
LOGLEVEL |
Log表达式 |
Log表达式 |
Alert、alert、ALERT、Error |
日期时间表达式
表达式标识 |
名称 |
匹配例子 |
---|---|---|
MONTH |
月份名称 |
Jan、January |
MONTHNUM |
月份数字 |
03、9、12 |
MONTHDAY |
日期数字 |
03、9、31 |
DAY |
星期几名称 |
Mon、Monday |
YEAR |
年份数字 |
|
HOUR |
小时数字 |
|
MINUTE |
分钟数字 |
|
SECOND |
秒数字 |
|
TIME |
时间 |
00:01:23 |
DATE_US |
美国时间 |
10-01-1892、10/01/1892/ |
DATE_EU |
欧洲日期格式 |
01-10-1892、01/10/1882、01.10.1892 |
ISO8601_TIMEZONE |
ISO8601时间格式 |
+10:23、-1023 |
TIMESTAMP_ISO8601 |
ISO8601时间戳格式 |
2016-07-03T00:34:06+08:00 |
DATE |
日期 |
美国日期%{DATE_US}或者欧洲日期%{DATE_EU} | |
DATESTAMP |
完整日期+时间 |
07-03-2016 00:34:06 |
HTTPDATE |
http默认日期格式 |
03/Jul/2016:00:36:53 +0800 |
案例
样本信息一:
这是一个随意匹配的类似于正则的.* 10.44.99.102 02:11:23
Grok串一:
%{GREEDYDATA:nouse}s%{IPV4:ipv4}s%{TIME:time}
输出结果如下一:
{ "ipv4": "10.44.99.102", "nouse": "这是一个随意匹配的类似于正则的.*", "time": "02:11:23" }
样本信息二:
2016-09-19T18:19:00 [8.8.8.8:prd] DEBUG this is an example log message
Grok串二:
%{TIMESTAMP_ISO8601:timestamp} [%{IPV4:ip}:%{WORD:environment}] %{LOGLEVEL:log_level} %{GREEDYDATA:message}
输出结果如下二:
{ "environment": "prd", "ip": "8.8.8.8", "log_level": "DEBUG", "message": "this is an example log message", "timestamp": "2016-09-19T18:19:00" }
注:在Grok串中可以使用正则表达式