如何监控 Lambda 运行时,包括每个函数的 API Gateway 开销?

Posted

技术标签:

【中文标题】如何监控 Lambda 运行时,包括每个函数的 API Gateway 开销?【英文标题】:How can I monitor Lambda runtime including API Gateway overhead per function? 【发布时间】:2021-12-10 04:59:26 【问题描述】:

考虑 API 网关上的以下 CloudWatch 警报:

LatencyAlarmP90:
    Type: AWS::CloudWatch::Alarm
    Condition: Production
    Properties:
      AlarmDescription: latency P90 is lower then 1.5 sec
      AlarmName: FooApiP90LatencyAlarm
      ComparisonOperator: GreaterThanOrEqualToThreshold
      ExtendedStatistic: "p90"
      Period: 300
      MetricName: "Latency"
      DatapointsToAlarm: 5
      EvaluationPeriods: 5
      Threshold: 1500
      Namespace: AWS/ApiGateway
      Dimensions:
        - Name: ApiName
          Value: !Sub "bar"
      AlarmActions:
        - Fn::ImportValue: !Sub "foo"
      OKActions:
        - Fn::ImportValue: !Sub foo"

如果触发此警报,我无法知道是哪个特定路由触发了它(多个 lambda 位于同一个 API 网关上)。

我正在考虑改为监控每个 Lambda。

如果我监控特定的 Lambda 延迟,它是否包括 API Gateway 延迟? (冷启动)还是仅运行时间?

如果没有,有没有办法监控特定路由/Lambda,包括 API 网关延迟?

【问题讨论】:

【参考方案1】:

如果我监控特定的 Lambda 延迟,它是否包括 API Gateway 延迟?

没有。

Duration 性能指标不包括任何 API 网关延迟,只是根据 docs 向上舍入到最接近毫秒的 Lambda 函数运行时间。


如果没有,有没有办法监控特定路由/Lambda,包括 API 网关延迟?

每条路线是的,每条 Lambda 号。

对于还包括 API Gateway 开销的指标,请使用 API GW 的 Latency 指标。

每个 Lambda 函数不支持 dimension 分配给指标并因此进行过滤,但您可以通过使用各种其他维度(包括路线)来过滤它来实现最终结果。

如果同一个 Lambda 函数负责多个路由,您将不可避免地需要更多警报。

您必须通过以下方式过滤警报:

方法 API 和阶段 舞台 APIID API 名称

【讨论】:

感谢您的回复。我已经在使用“延迟”,您引用的文档是用于 ApiGateway 监控的,就像我的示例代码一样,我的问题是关于特定的 Lamba 监控 已更新以澄清 - 不幸的是,Lambda 函数目前不是 API Gateway 支持的维度,因此您必须根据即方法添加更多警报 你有如何定义方法的例子吗?这似乎不起作用维度:-名称:ApiName 值:“myApi”-名称:方法值:“/report/payments” 什么是“不起作用”?你在使用用户界面吗?

以上是关于如何监控 Lambda 运行时,包括每个函数的 API Gateway 开销?的主要内容,如果未能解决你的问题,请参考以下文章

如何设置 lambda 函数以一起使用两个触发器

如何设计在 Lambda 函数上运行的可扩展 ETL

AWS Lambda 函数计费持续时间是不是还包括使用 Lambda 容器时的 Init Duration?

如何从账户 A 中的 Lambda(VPC 中的 Lambda)调用账户 B 中的 AWS Lambda 函数(VPC 中的这个 Lambda)

从 AWS Lambda 发送 RabbitMQ 消息

禁用 CloudWatch 以监控 Lambda 函数的日志