logstash grok mysql_logstash grok使用案例-阿里云开发者社区

Grok 是 Logstash 最重要的插件。你可以在 grok 里预定义好命名正则表达式,在稍后(grok参数或者其他正则表达式里)引用它。它非常适用于syslog logs,apache和一些其他的webserver logs,以及mysql logs。grok有很多定义好pattern,当然也可以自己定义。

grok的语法:

%{SYNTAX:SEMANTIC}

SYNTAX表示grok定义好的pattern,SEMANTIC表示自定义的字段。

例如192.168.0.100

用%{IP:client}可以将IP定义为client

假如现在某webserver log中的内容为以下格式,

我们完全可以利用grok将这些信息定义成以下字段

%{IP:client}%{WORD:method}%{URIPATHPARAM:request}%{NUMBER:bytes}%{NUMBER:duration}

写到配置文件中通常这样子:

input{file{path=>"/var/log/http.log"}}filter{grok{match=>{"message"=>"%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}"}}}

grok过滤后得到的信息成了以下这样子

client: 55.3.244.1

method: GET

request: /index.html

bytes: 15824

duration: 0.043

如何自定义Pattern?

语法:(?the pattern here)

假如有以下内容“

begin 123.456 end

我们希望将123.456定义成request_time字段,可以向下面这样写这个正则表达式

\s+(?\d+(?:\.\d+)?)\s+

解释:

\s:匹配任何不可见字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]。+表示匹配次数为1次或者多次

(?  ):这个是grok语法,request_time表示要将捕获的字符定义成的字段名

\d+:匹配一个或者多个数字

(?:\.\d+):为正则表达式,

(?: pattern):非获取匹配,匹配pattern但不获取匹配结果,不进行存储供以后使用。这在使用或字符“(|)”来组合一个模式的各个部分是很有用。例如“industr(?:y|ies)”就是一个比“industry|industries”更简略的表达式。

\.\d+:表示点后面跟一个或者多个 数字,(?:\.\d+)?表示点后面跟一个或多个数字这种情况出现0次或者多次,如果为0次,则request_time为一个整数。所以匹配到的结果可能为123.456或者123或者123.4.5.6,这些都满足条件

测试下:

创建一个配置文件,内容如下:

input {stdin{}}

filter {

grok {

match => {

"message" => "\s+(?\d+(?:\.\d+)?)\s+"

}

}

}

output {stdout{}}

运行 logstash 进程然后输入 "begin 123.456 end",你会看到类似下面这样的输出:

{

"message" => "begin 123.456 end",

"@version" => "1",

"@timestamp" => "2014-08-09T11:55:38.186Z",

"host" => "raochenlindeMacBook-Air.local",

"request_time" => "123.456"

}

练习:

注意上面的日志文件中不是每一行的内容格式都是一样的,grok表达式如下

上面的日志内容在后面出现了不一样的地方

3e216a47f4983115852c94f2f5022edd.png

该如何处理?冒号可能有也可能没有,必须对冒号进行匹配,正则表达式如下

当没有冒号,后面的信息是以下内容时,

grok这样写,

当出现

这样的内容时,grok这样写,

但是这两种情况需要加“|”来判断,表示或,所以正确的写法为

注意如果上面的grok语句顺序调整为下面这样子时

就会有问题,它会将

全部匹配成detail。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值