CloudWatch Insights - 按 url 分组日志并删除唯一 ID

CloudWatch Insights - Group logs by url with unique ids removed

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

urls 的一些示例:

/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,它包含一个 'endpoint' 字段,看起来像上面的 url 之一:

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

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

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

在替换中使用 2 个捕获组 </code></p> <pre><code>^(.*?\/)\d+(?:(.*?\/)\d+\b)?

Regex demo

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

Regex demo