加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 05:58:42 所属栏目:百科 来源:网络整理
导读:我想在我的日志行中添加特定URI参数的字段 这是一个示例日志行: 2017-03-12 21:34:36 W3SVC1 webserver 1.1.1.1 GET /webpage.html param1=22222param2=22222param3=param4=4444444 80 - 2.2.2.2 HTTP/1.1 Java/1.8.0_121 - - balh.com 200 0 0 311 244 247
我想在我的日志行中添加特定URI参数的字段

这是一个示例日志行:

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

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

编辑
这几乎有效:

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

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

解决方法

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读