0

我希望使用 CloudWatch Logs Insights 按请求 url 字段对日志进行分组,但是 url 可以包含 0-2 个唯一的数字标识符,我希望在进行分组时忽略这些标识符。

一些网址示例:

/dev/user
/dev/user/123
/dev/user/123/inventory/4
/dev/server/3/statistics

这些组看起来像:

/dev/user
/dev/user/
/dev/user//inventory/
/dev/server//statistics

我有一些非常接近我需要的东西,它提取第一个可选标识符前面的 url 部分以及第一个标识符和第二个标识符之间的部分并将两者连接起来,但它并不完全可靠。这是我目前所在的位置,@message 是有效的 json,其中包含一个“端点”字段,看起来像上面的网址之一:

fields @message | parse endpoint /(\bdev)\/(?<@prefix>[^0-9]+)(?:[0-9]+)(?<@suffix>[^0-9]+)/ | stats count(*) by @prefix

虽然此查询将使用像“/dev/accounts/1”这样的端点,但它会忽略像“/dev/accounts”这样的端点,因为它没有正则表达式正在寻找的所有组件,这意味着我错过了很多结果。

4

2 回答 2

2

如果您要删除 0-2 个数字标识符,您可以匹配第一个数字,也可以选择匹配第二个数字,并使用 2 个捕获组来捕获您想要保留的内容。

在替换中使用 2 个捕获组$1$2

^(.*?\/)\d+(?:(.*?\/)\d+\b)?

正则表达式演示

于 2020-07-28T16:43:55.720 回答
0

看起来我可以在捕获组之外使用问号将这些组标记为可选,这解决了我遇到的最后一个问题。

正则表达式演示

于 2020-07-29T15:09:42.920 回答