如何在AWS Log Insights中实现类SQL嵌套查询过滤Lambda请求
CloudWatch Log Insights 原生不支持SQL风格的嵌套子查询,你设想的单条查询内通过NOT IN关联子查询结果排除预热请求的写法无法直接执行。
可落地的实现方式
方案1(推荐,适配常态化统计场景)
从日志打标环节解决,过滤成本最低:
- 你使用的预热插件发起的调用,传入Lambda的event自带专属识别特征,可直接在请求入口判断是否为预热请求
- 同一次预热请求产生的所有日志,统一加上固定标记比如
is_warmup: 1 - 统计时直接加过滤条件即可,示例查询:
fields @duration | filter is_warmup != 1 | stats pct(@duration, 99) as p99_latency, pct(@duration, 95) as p95_latency
这种写法没有查询长度限制,不管统计的时间范围多大都能正常运行,适合配置长期的时延监控大盘。
方案2(适配临时短时间范围排查场景)
分两次查询手动拼接过滤条件:
- 先执行第一条查询,捞出指定时间窗口内所有预热请求对应的requestID:
fields @requestId | filter @message like "你预先打印的预热请求专属日志关键字" | stats values(@requestId) as warmup_ids
- 将返回结果里的所有requestID整理为字符串列表,填入第二条统计查询的过滤条件中:
fields @duration | filter @requestId not in ["warmup_id_1", "warmup_id_2", "warmup_id_3"] | stats pct(@duration, 99) as p99_latency, pct(@duration, 95) as p95_latency
注意Log Insights的not in语法对列表长度有限制,如果所选时间范围太长、预热请求ID过多会触发查询报错,仅适合短时间窗口的临时排查使用。
内容的提问来源于stack exchange,提问作者Kancha
相关产品推荐
相关产品推荐

