关于Logstash中grok插件的正则表达式例子
2016-11-09 15:41
411 查看
一、前言
近期需要对Nginx产生的日志进行采集,问了下度娘,业内最著名的解决方案非
ELK(
Elasticsearch,
Logstash,
Kibana)莫属。
Logstash负责采集日志,
Elasticsearch负责存储、索引日志,
Kibana则负责通过Web形式展现日志。
今天,我要说的是
Logstash,它可以从多种渠道采集数据,包括控制台标准输入、日志文件、队列等等,只要你能想到,都可以通过插件的方式实现。
其中,日志源提供的日志格式可能并不是我们想要插入存储介质里的格式,所以,Logstash里提供了一系列的filter来让我们转换日志。
Grok就是这些filters里最重要的一个插件,下面我就说说它。
二、Grok提供的常用Patterns说明及举例
大多数Linux使用人员都有过用正则表达式来查询机器中相关文件或文件里内容的经历,在Grok里,我们也是使用正则表达式来识别日志里的相关数据块。有两种方式来使用正则表达式:
直接写正则来匹配
用Grok表达式映射正则来匹配
在我看来,每次重新写正则是一件很痛苦的事情,为什么不用表达式来一劳永逸呢?
特别提示:Grok表达式很像C语言里的宏定义
要学习Grok的默认表达式,我们就要找到它的具体配置路径,路径如下:
# Windows下路径 [你的logstash安装路径]\vendor\bundle\jruby\x.x\gems\logstash-patterns-core-x.x.x\patterns\grok-patterns
现在对常用的表达式进行说明:
常用表达式
USERNAME 或 USER用户名,由数字、大小写及特殊字符(._-)组成的字符串
比如:
1234、
Bob、
Alex.Wong等
EMAILLOCALPART
电子邮件用户名部分,首位由大小写字母组成,其他位由数字、大小写及特殊字符(_.+-=:)组成的字符串。注意,国内的QQ纯数字邮箱账号是无法匹配的,需要修改正则
比如:
stone、
Gary_Lu、
abc-123等
EMAILADDRESS
电子邮件
比如:
stone@abc.com、
Gary_Lu@gmail.com、
abc-123@163.com等
HTTPDUSER
Apache服务器的用户,可以是
EMAILADDRESS或
USERNAME
INT
整数,包括0和正负整数
比如:
0、
-123、
43987等
BASE10NUM 或 NUMBER
十进制数字,包括整数和小数
比如:
0、
18、
5.23等
BASE16NUM
十六进制数字,整数
比如:
0x0045fa2d、
-0x3F8709等
BASE16FLOAT
十六进制数字,整数和小数
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
主机名称
IPORHOST
IP或者主机名称
HOSTPORT
主机名(IP)+端口
比如:
127.0.0.1:3306、
api.stozen.net:8000等
PATH
路径,Unix系统或者Windows系统里的路径格式
比如:
/usr/local/nginx/sbin/nginx、
c:\windows\system32\clr.exe等
URIPROTO
URI协议
比如:
http、
ftp等
URIHOST
URI主机
比如:
www.stozen.net、
10.0.0.1:22等
URIPATH
URI路径
比如:
//www.stozen.net/abc/、
/api.php等
URIPARAM
URI里的GET参数
比如:
?a=1&b=2&c=3
URIPATHPARAM
URI路径+GET参数
比如:
//www.stozen.net/abc/api.php?a=1&b=2&c=3
URI
完整的URI
比如:
http://www.stozen.net/abc/api.php?a=1&b=2&c=3
日期时间表达式
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-15-1982、
10/15/1982等
DATE_EU
欧洲日期格式
比如:
15-10-1982、
15/10/1982、
15.10.1982等
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
Log表达式
LOGLEVEL日志等级
比如:
Alert、
alert、
ALERT、
Error等
三、创建自己的Grok表达式
在业务领域中,可能会有越来越多的日志格式出现在我们眼前,而Grok的默认表达式显然已无法满足我们的需求(比如用户身份证号、手机号等信息),所以,我们需要自己动手添加些表达式。表达式 | 正则表达式 | 说明 |
---|---|---|
DATE_CHS | %{YEAR}[./-]%{MONTHNUM}[./-]%{MONTHDAY} | 中国人习惯的日期格式 |
ZIPCODE_CHS | [1-9]\d{5} | 国内邮政编码 |
GAME_ACCOUNT | [a-zA-Z][a-zA-Z0-9_]{4,15} | 游戏账号,首字符为字母,4-15位字母、数字、下划线组成 |
相关文章推荐
- 关于Logstash中grok插件的正则表达式例子
- 关于Logstash中grok插件的正则表达式例子
- 关于Logstash中grok插件的正则表达式例子
- 关于Logstash中grok插件的正则表达式例子
- 关于Logstash中grok插件的正则表达式例子
- 关于Logstash中grok插件的正则表达式例子
- Logstash笔记(三)----Filter插件及grok的正则表达式来解析日志
- ELK中logstash下的grok正则表达式总结
- 关于struts2 json插件的正则表达式写法的一点儿总结
- ELK中logstash下的grok正则表达式总结
- 关于正则表达式中参数/g /m的详细分析和例子详解
- 一段关于正则表达式的例子
- logstash 的 grok 正则表达式测试方法
- 关于正则表达式中的(?=re)的理解和例子
- CowNew开源-实际例子学正则表达式
- 关于正则表达式
- 关于php正则表达式的两点备注
- 关于正则表达式的
- java中正则表达式判断用户登陆例子
- 关于正则表达式