如何从AWS Lambda获取路由/路径级单位时间请求数指标
AWS Lambda 路径级请求数监控实现方案
AWS Lambda 原生默认指标确实不提供路由/路径维度的请求数统计,你可以通过以下3种常用方案实现需求:
方案1:业务代码内自定义埋点上报CloudWatch
适合可以修改业务代码、需要实时指标告警的场景:
- 操作步骤:
- 在Lambda函数初始化阶段预加载CloudWatch客户端,避免每次请求都初始化带来的性能损耗
- 路由匹配逻辑执行完成后,提取当前请求的路径作为指标维度,调用CloudWatch的
PutMetricData接口上报单次请求计数 - 自定义指标建议命名为
Custom/Lambda/RouteRequestCount,维度配置RoutePath(对应请求路径)、FunctionName(对应Lambda函数名)即可 - 后续在CloudWatch控制台对该指标做
Sum / Period(1)的运算,就能直接得到对应路径的每秒请求数(RPS)
- 注意事项:如果路由量级过万,建议先对路径做规则聚合后再上报,避免CloudWatch指标维度过多产生额外成本;高并发场景下可以先在内存中批量聚合指标,再异步批量上报,减少CloudWatch接口调用次数。
方案2:结合API Gateway访问日志统计(Lambda由API Gateway触发时适用)
如果你的Lambda是作为API Gateway的后端集成,不需要修改业务代码即可实现:
- 操作步骤:
- 开启对应API Gateway的访问日志功能,将日志投递到CloudWatch日志组,日志格式中至少保留
@timestamp、$context.path两个字段 - 使用CloudWatch Logs Insights执行查询统计,示例查询语句如下:
语句输出结果就是每秒每个路径对应的请求数,即你需要的路径级RPS。fields @timestamp, path | stats count() as rps by bin(1s), path | sort bin(1s) desc, rps desc - 开启对应API Gateway的访问日志功能,将日志投递到CloudWatch日志组,日志格式中至少保留
- 优势:完全无业务侵入,适合已经上线、不方便修改代码的场景,同时支持历史数据回溯查询。
方案3:Lambda Layer统一埋点(多函数共享统计逻辑时适用)
如果有大量Lambda函数都需要做路径级请求统计,不想逐个修改业务代码,可以把指标上报逻辑封装成Lambda Layer,所有需要统计的函数绑定该Layer即可,Layer会自动拦截请求入口提取路径上报指标。
注意:自定义指标上报、访问日志存储都会产生额外的CloudWatch费用,建议根据实际业务量级配置采样规则,避免不必要的成本开销。
内容的提问来源于stack exchange,提问作者kumarmo2
相关产品推荐
相关产品推荐

