龙空技术网

企业级ELK实战之(3)内置正则grok提取日志

kuberLi 360

前言:

当前朋友们对“elknginxgrok”可能比较着重,我们都需要了解一些“elknginxgrok”的相关文章。那么小编在网上搜集了一些对于“elknginxgrok””的相关资讯,希望你们能喜欢,咱们快快来学习一下吧!

前言

之前完成了elk的平台搭建工作,接下来就可以提取日志了。提取日志一般写正则表达式,但是比较麻烦,要偷懒的话,可以使用logstash的内置表达式grok。

grok就是这些filters里最重要的一个插件,下面我就说说它。

Grok提供的常用Patterns说明及举例

大多数Linux使用人员都有过用正则表达式来查询机器中相关文件或文件里内容的经历,在Grok里,我们也是使用正则表达式来识别日志里的相关数据块。

有两种方式来使用正则表达式:

1、直接写正则来匹配

2、用Grok表达式映射正则来匹配

logstash内置grok的安装路径

要学习Grok的默认表达式,我们就要找到它的具体配置路径,路径如下:

linux:

[你的logstash安装路径]/vendor/bundle/jruby/x.x.x/gems/logstash-patterns-core- x.x.x/patterns/

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主机

比如:、10.0.0.1:22等

URIPATH

URI路径

比如://、/api.php等

URIPARAM

URI里的GET参数

比如:?a=1&b=2&c=3

URIPATHPARAM

URI路径+GET参数

比如://;b=2&c=3

URI

完整的URI

比如:;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提取日志实战logstash最简单配置,输入什么,就输出什么

1、修改配置文件

vim /usr/local/logstash-6.2.3/config/logstash.conf

注:在vim命令模式下输入:ggdG可以清除文件所有内容!

添加如下内容:

input{

stdin{}

}

output{

stdout{

codec=>rubydebug

}

}

2、重启logstash

/usr/local/logstash-6.2.3/bin/logstash -f /usr/local/logstash-6.2.3/config/logstash.conf

重启成功,在绿色光标处输入相关内容,我这里选取/var/log/messages日志

cat /var/log/messages

输入内容"Oct 20 05:30:01 master-2 systemd: Starting Session 18 of user root.",显示结果:

使用grok提取系统日志

1、字段说明

以字段"192.168.139.98 GET /index.html 1344 1.169"说明:

这里需要提取IP、字段、内容大小、回复包头等,修改内容如下:

input{

stdin{}

}

filter {

grok {

match=> {"message"=>"%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}"}

}

}

output{

stdout{

codec=>rubydebug

}

}

提取结果如下:

标签: #elknginxgrok