ELK学习指南(四)- logstash-filter-grok

正则表达式抽取字段


1.内置很多写好的正则,如:NOTSPACE,REEDYDATA,HOSTNAME,ISO8601_TIMEZONE,LOGLEVEL
详情可参考:https://github.com/logstash-plugins/logstash-patterns-core/blob/master/patterns/grok-patterns
内置表达式使用语法示例:%{LOGLEVEL:loglevel}


2.自定义正则表达式:除了使用内置正则,很多时候还需要自己自定义正则表达式,自定义正则表达式的做法是
1)先在logstash安装目录下新建文件夹(名字可以自定义):patterns
2)在新建文件夹里,新建一个文件
3)在新建文件里编写自定义正则,格式如下:
    
TIMESTAMP_GC001 %{YEAR}-%{MONTHNUM}-%{MONTHDAY}T%{HOUR}:?%{MINUTE}(?::?%{SECOND})
TIMESTAMP_GC002 %{YEAR}-%{MONTHNUM}-%{MONTHDAY}T%{HOUR}:?%{MINUTE}(?::?%{SECOND})%{ISO8601_TIMEZONE}

3.grok插件,match选项中的正则表达式有三种种写法,
1)第一种,使用有命名的正则表达式,如:
   
%{TIMESTAMP_ISO8601:timestamp}\s+%{LOGLEVEL:loglevel}\s+\[%{NOTSPACE:thread}\]\s+%{JAVACLASS:logclass}\:\s+%{GREEDYDATA:content}
2)第二种,使用原生正则表达式,如:
    
\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}.*ParNew: (?<ParNew_before_memory>\d{1,7})K->(?<ParNew_after_memory>\d{1,7})K\((?<ParNew_total_memory>\d{1,7})K\), (?<ParNew_GC_time>\d\.\d{7}) secs\] (?<heap_before_memory>\d{1,8})K->(?<heap_after_memory>\d{1,8})K\((?<heap_total_memory>\d{1,8})K\), (?<heap_GC_time>\d\.\d{7}) secs\].*real=(?<real_time>\d\.\d{2})
3)第三种,混合方式,如:
    
%{TIMESTAMP_ISO8601:timestamp}: \d{1,5}.\d{3}:.*CMS-initial-mark.*K\), (?<CMS_initial_mark_time>\d\.\d{7}) secs

4.match的多项匹配:有时候我们会碰上一个日志有多种可能格式的情况。这时候要写成单一正则就比较困难,或者全用 | 隔开又比较丑陋。这时候,logstash 的语法提供给我们一个有趣的解决方式。文档中,都说明 logstash/filters/grok 插件的 match 参数应该接受的是一个 Hash 值。但是因为早期的 logstash 语法中 Hash 值也是用 [] 这种方式书写的,所以其实现在传递 Array 值给 match 参数也完全没问题。所以,我们这里其实可以传递多个正则来匹配同一个字段:
match => [                
	    "message","%{TIMESTAMP_ISO8601:timestamp}\s+%{LOGLEVEL:loglevel}\s+\[PriorityRpcServer.handler=%{NUMBER:RPCconnection:INT},queue=\d,port=\d{5}\]\s+%{JAVACLASS:logclass}\:\s+%{GREEDYDATA:content}",
            "message","%{TIMESTAMP_ISO8601:timestamp}\s+%{LOGLEVEL:loglevel}\s+\[RS_OPEN_REGION-dev\d:%{USER:region}\]\s+%{JAVACLASS:logclass}\:\s+%{GREEDYDATA:content}",
            "message","%{TIMESTAMP_ISO8601:timestamp}\s+%{LOGLEVEL:loglevel}\s+\[%{NOTSPACE:thread}\]\s+%{JAVACLASS:logclass}\:\s+%{GREEDYDATA:content}"
         ]
logstash 会按照这个定义次序依次尝试匹配,到匹配成功为止。虽说效果跟用 | 分割写个大大的正则是一样的,但是可阅读性好了很多。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值