如何仅在 Cloudwatch 日志洞察力的过滤行上按正则表达式进行解析?

How do I parse by regular expressions only on filtered lines on Cloudwatch log insights?

有没有办法重构此 cloudwatch 洞察查询,使其 运行 更快?

fields @timestamp, @message
| filter @message like /NewProductRequest/
| parse @message /.*"productType":\s*"(?<productType>\w+)"/
| stats count(*) group productType 

我运行在有限的时间内记录它(相当于 1 天的日志)。 运行.

需要很长时间

当我删除 parse 命令和 count(*) 过滤行时:20,000,000 行中只有 2500 条匹配:查询 returns 几秒钟后

使用 parse 命令,查询需要 >15 分钟。我可以看到吞吐量从 ~1GBps 下降到 ~2MBps。

运行 2500 条过滤行上的 parse 正则表达式应该可以忽略不计。如果我将过滤后的结果下载到我的 macbook 和 运行 Python.

中的正则表达式,则需要不到 2 秒的时间

这让我相信 cloudwatch 正在 运行 在日志中的每一行上执行 parse 命令,而不仅仅是过滤后的行。

有没有办法重组我的查询,以便parse命令在我的过滤器命令之后运行? (有效解析 2.5k 行而不是 2000 万行)

删除表达式开头的 .* 可提高性能。如果您只搜索在 any 字符序列 (.*) 之后开始的字符串,那么此解决方案将适用于您。如果您的正则表达式的开头不是 .*

,这不会解决问题