如何在自定义grok模式中引用正则表达式组?
我想在我的日志行中添加特定URI参数的字段
这是一个示例日志行: 2017-03-12 21:34:36 W3SVC1 webserver 1.1.1.1 GET /webpage.html param1=22222¶m2=22222¶m3=¶m4=4444444 80 - 2.2.2.2 HTTP/1.1 Java/1.8.0_121 - - balh.com 200 0 0 311 244 247 - - 我想为param1,param2,param3和param4添加字段. 我正在使用这个grok过滤器: grok { match => [ "message","(?<param1>param1=(.*?)&)"] } 所以这个正则表达式使用捕获组来获取“param1 =”和“&”之间的文本.但是格罗克忽略了捕获组并获得了“param1 = 22222&”我只是想抓住“222221” 我怎么能说使用捕获组1或告诉grok使用我的正则表达式捕获组? 编辑 grok { match => [ "message","(?<param1>param1=(?<param1>.*?)&)"] } 所以我想我在这里做的是使用两个命名组,但名称相同.问题是“param1”字段中有两个条目用于每个组.一个用于“param1 = 22222&”和一个“22222”.我如何才能获得第二组? 解决方法
默认情况下,grok仅考虑命名的捕获组,编号的捕获组不会触发字段创建.如果要覆盖此行为,请将
但是,使用命名捕获组没有任何问题(我使用了一个否定的字符类[^&] *而不是一个带有消耗&延迟的匹配点): bparam1=(?<param1>[^&]*) [^&] *匹配除&之外的0个或更多个字符,因此也匹配空参数(您可能希望通过更改*来避免,或使用keep_empty_captures参数控制)和字符串末尾. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |