[英]Grok Pattern optional fields on line end
我想“摸索”这两行:
usg210 CEF:0|ZyXEL|USG210|4.65(AAPI.1)|0|Access Control|5|devID=bccf4fxxxxxx src=192.168.1.228 dst=255.255.255.255 spt=7303 dpt=7303 msg=Match default rule, DROP proto=17 app=others
usg210 CEF:0|ZyXEL|USG210||0|Blocked Web Sites|9|devID=bccf4fxxxxxx src=192.168.1.228 dst=23.57.22.128 spt=50938 dpt=443 msg=gameplay.intel.com : Games, Rule_id=5, SSI=N (HTTPS Domain Filter)
图案:
\|(?:.*)\|%{DATA:class}\|%{WORD:loglevel}\|devID=%{WORD:mac} src=%{IPV4:ipsrc} dst=%{IPV4:ipdst} spt=%{WORD:spt} dpt=%{WORD:dpt} msg=%{GREEDYDATA:msg}( proto=%{WORD:proto} app=%{WORD:app})?
'proto' 和 'app' 字段是可选的,但我的调试器消息如下所示:“匹配默认规则,DROP proto=17 app=others”并且应用程序的原型是 null。
谁能解释如果数据存在如何填写字段,如果不存在我如何使它们成为可选的。
您正在使用GREEDYDATA
模式,并且不需要您的模式来匹配整个字符串。
在 Grok 中,您需要将GREEDYDATA
替换为DATA
并在模式末尾添加$
:
\|.*\|%{DATA:class}\|%{WORD:loglevel}\|devID=%{WORD:mac} src=%{IPV4:ipsrc} dst=%{IPV4:ipdst} spt=%{WORD:spt} dpt=%{WORD:dpt} msg=%{DATA:msg}( proto=%{WORD:proto} app=%{WORD:app})?$
请参阅msg=%{DATA:msg}( proto=%{WORD:proto} app=%{WORD:app})?$
部分,其中msg=%{DATA:msg}
和$
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.