如何监控包含API Gateway开销的单Lambda运行时及链路延迟?
问题1:Lambda监控指标的延迟统计范围
Lambda AWS/Lambda 命名空间下的默认Duration指标仅统计Lambda自身函数处理程序的运行时长,不包含以下开销:
- API Gateway侧的请求解析、身份鉴权、限流校验、响应序列化、网络传输等耗时
- Lambda冷启动的初始化阶段耗时(冷启动Init时长为单独的
InitDuration指标,同样不计入Duration)
问题2:特定路由/Lambda的全链路延迟(含APIGW开销)监控方案
最轻量化、无需额外业务改造的方案是开启API Gateway的按路径详细指标,直接在原有的APIGW Latency指标基础上增加维度实现路由级监控:
- 先在API Gateway的Stage配置中开启详细CloudWatch指标,CloudFormation配置示例如下(在你的
AWS::ApiGateway::Stage资源的Properties中新增字段):
MetricsEnabled: true
开启后API Gateway的Latency指标会额外支持Method(请求方法)、Resource(路由路径)两个维度,你可以为每个绑定了Lambda的路由单独配置告警,触发时直接对应到具体路由和绑定的Lambda。
2. 调整你现有的CloudWatch告警配置,增加对应路由的维度即可,示例如下:
LatencyAlarmP90UserGet: Type: AWS::CloudWatch::Alarm Condition: Production Properties: AlarmDescription: GET /user接口P90延迟超过1.5秒 AlarmName: FooApiGetUserP90LatencyAlarm ComparisonOperator: GreaterThanOrEqualToThreshold ExtendedStatistic: "p90" Period: 300 MetricName: "Latency" DatapointsToAlarm: 5 EvaluationPeriods: 5 Threshold: 1500 Namespace: AWS/ApiGateway Dimensions: - Name: ApiName Value: !Sub "bar" - Name: Method Value: "GET" - Name: Resource Value: "/user" AlarmActions: - Fn::ImportValue: !Sub "foo" OKActions: - Fn::ImportValue: !Sub "foo"
注:你提供的原有告警配置中
OKActions的!Sub foo"存在语法错误,缺少前双引号,建议修正为!Sub "foo"。
如果需要更细粒度的链路排查,也可以开启API Gateway和Lambda的X-Ray链路追踪,可直接查看单请求全链路各阶段的耗时分布。
内容的提问来源于stack exchange,提问作者MCMatan
相关产品推荐
相关产品推荐

