logstash判断是否匹配_logstash grok 多项匹配

业务场景:新版本日志需要添加字段,需要兼容新旧日志匹配

值得留意的是即使你的日志是能正常匹配的,Grok还是会按照顺序许匹配送进来的日志,当碰到第一个匹配成功的日志就break掉这个循环。这就要我们自己去判断一下,怎么放是最合适的了,不然的话会一个一个往下进行尝试,毕竟是多种不同的格式。

一种常用的优化方案是使用分层匹配来对这个Grok进行优化

第一种:filter {

grok {

match => {

"message"=>[

"%{DATA:hostname}\|%{DATA:tag}\|%{DATA:types}\|%{DATA:uid}\|%{GREEDYDATA:msg}",

"%{DATA:hostname}\|%{DATA:tag}\|%{GREEDYDATA:msg}"]

}

}

第二种:filter {

grok {

match => [

"message" , "%{DATA:hostname}\|%{DATA:tag}\|%{DATA:types}\|%{DATA:uid}\|%{GREEDYDATA:msg}",

"message" , "%{DATA:hostname}\|%{DATA:tag}\|%{GREEDYDATA:msg}"

]

remove_field => ['type','_id','input_type','tags','message','beat','offset']

}

第三种:太多使用DATA和GREEDYDAYA会导致性能cpu负载严重。建议多使用正则匹配,或者ruby代码块filter {

ruby {

code =>'

arr = event["message"].split("|")

if arr.length == 5

event["hostname"] = arr[0]

event["tag"] = arr[1]

event["types"] = arr[2]

event["uid"] = arr[3]

event["msg"] = arr[4]

elsif arr.length == 3

event["hostname"] = arr[0]

event["tag"] = arr[1]

event["msg"] = arr[2]

end'

remove_field => ['type','_id','input_type','tags','message','beat','offset']

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值