Logstash6中grok插件的常用正则表达式

Logstash6中grok插件的常用正则表达式

grok默认表达式

Logstash 内置了120种默认表达式,可以查看patterns,里面对表达式做了分组,每个文件为一组,文件内部有对应的表达式模式。下面只是部分常用的。

常用表达式

表达式标识名称详情匹配例子
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
HTTPDUSERApache服务器的用户可以是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标准UUID550E8400-E29B-11D4-A716-446655440000
MACMAC地址可以是Cisco设备里的MAC地址,也可以是通用或者Windows系统的MAC地址
IPIP地址IPv4或IPv6地址127.0.0.1、FE80:0000:0000:0000:AAAA:0000:00C2:0002
HOSTNAMEIP或者主机名称
HOSTPORT主机名(IP)+端口127.0.0.1:3306、api.windcoder.com:8000
PATH路径Unix系统或者Windows系统里的路径格式/usr/local/nginx/sbin/nginx、c:\windows\system32\clr.exe
URIPROTOURI协议http、ftp
URIHOSTURI主机windcoder.com、10.0.0.1:22
URIPATHURI路径//windcoder.com/abc/、/api.php
URIPARAMURI里的GET参数?a=1&b=2&c=3
URIPATHPARAMURI路径+GET参数/windcoder.com/abc/api.php?a=1&b=2&c=3
URI完整的URIhttps://windcoder.com/abc/api.php?a=1&b=2&c=3
LOGLEVELLog表达式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_TIMEZONEISO8601时间格式+10:23、-1023
TIMESTAMP_ISO8601ISO8601时间戳格式2016-07-03T00:34:06+08:00
DATE日期美国日期%{DATE_US}或者欧洲日期%{DATE_EU}
DATESTAMP完整日期+时间07-03-2016 00:34:06
HTTPDATEhttp默认日期格式03/Jul/2016:00:36:53 +0800

自定义grok表达式

上面列举的只是一部分,更多的可以自己搜索查找,如果需要自定义,需要按以下步骤进行:

  • 创建一个名为patterns的目录,其中包含一个名为extra的文件(文件名无关紧要,但为自己命名有意义)
  • 在该文件中,将您需要的模式按如下格式书写:模式名称,空格,然后是该模式的正则表达式。

例如,获取 一个queue id:

# contents of ./patterns/postfix:
POSTFIX_QUEUEID [0-9A-F]{10,11}

然后使用此插件中的patterns_dir 字段设置告诉logstash您的自定义模式目录所在的位置。 这是一个包含示例日志的完整示例:

Jan 1 06:25:43 mailserver14 postfix/cleanup[21403]: BEF25A72965: message-id=<20130101142543.5828399CCAF@mailserver14.example.com>

配置:

filter {
grok {
patterns_dir => ["./patterns"]
match => { "message" => "%{SYSLOGBASE} %{POSTFIX_QUEUEID:queue_id}: %{GREEDYDATA:syslog_message}" }
}
}

结果:

timestamp: Jan 1 06:25:43
logsource: mailserver14
program: postfix/cleanup
pid: 21403
queue_id: BEF25A72965
syslog_message: message-id=<20130101142543.5828399CCAF@mailserver14.example.com>

另一种选择是使用pattern_definitions在过滤器中定义内联模式。

这主要是为了方便起见,并允许用户定义一个可以在该过滤器中使用的模式。

pattern_definitions中新定义的模式在特定的grok过滤器之外将不可用。

参考资料

Grok filter plugin 关于Logstash中grok插件的正则表达式例子

本文采用 CC BY-NC-SA 4.0 许可,转载请注明出处与作者。

支持一下

如果这篇文章对你有帮助,欢迎打赏或分享。

打赏支持

评论