如何在自定义grok模式中引用正则表达式组?

我想在我的日志行中添加特定URI参数的字段

这是一个示例日志行:

2017-03-12 21:34:36 W3SVC1 webserver 1.1.1.1 GET /webpage.html param1=11111&param2=22222&param3=&param4=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 = 11111&”我只是想抓住“111111”

我怎么能说使用捕获组1或告诉grok使用我的正则表达式捕获组?

编辑
这几乎有效:

grok {
    match => [ "message","(?<param1>param1=(?<param1>.*?)&)"]
  }

所以我想我在这里做的是使用两个命名组,但名称相同.问题是“param1”字段中有两个条目用于每个组.一个用于“param1 = 11111&”和一个“11111”.我如何才能获得第二组?

解决方法

How can I say use capture group 1 or tell grok to use my regex capture group?

认情况下,grok仅考虑命名的捕获组,编号的捕获组不会触发字段创建.如果要覆盖此行为,请将named_captures_only设置为false:

named_captures_only
– Value type is 07001
– Default value is true
If true,only store named captures from grok.

但是,使用命名捕获组没有任何问题(我使用了一个否定的字符类[^&] *而不是一个带有消耗&延迟的匹配点):

\bparam1=(?<param1>[^&]*)

[^&] *匹配除&之外的0个或更多个字符,因此也匹配空参数(您可能希望通过更改*来避免,或使用keep_empty_captures参数控制)和字符串末尾.

enter image description here

相关文章

正则替换html代码中img标签的src值在开发富文本信息在移动端...
正则表达式
AWK是一种处理文本文件的语言,是一个强大的文件分析工具。它...
正则表达式是特殊的字符序列,利用事先定义好的特定字符以及...
Python界一名小学生,热心分享编程学习。
收集整理每周优质开发者内容,包括、、等方面。每周五定期发...