具有多个匹配项的 Logstash Grok 模式

Logstash Grok pattern with multiple matches

我正在尝试编写一个会产生多个匹配项的 grok 表达式。我正在解析一条重复了 5 次相同模式的行。

我已经能够使用将 return 进行多次匹配的正则表达式创建一个简单的模式,但 Grok 似乎无法那样工作。不是很懂Ruby所以没仔细看代码

示例输入:

222444555

模式:

(?<number>\d{3})*

我希望输出是这样的:

"number" : [
    [
        "222", "444", "555"
    ]
]

或类似的东西。这在 Grok 中可能吗?我知道我可以重复这个模式三次,但在某些行中重复的次数未知。

有什么指点吗?

我采取了不同的方法。我使用 grok 来提取行中重复的部分。然后我使用 ruby {} 过滤器使用扫描功能将行分成几部分:

ruby {
    code => "event.put('segment', event.get('segments').scan(/.{3}/))
}

效果非常好,因为它在段 属性 中创建了一个数组,然后在该字段上创建了 split {},我得到了我想要的多个事件。