如何排查与 Lambda 集成的 API Gateway 请求中的高延迟问题?

2 分钟阅读
0

当我向与 AWS Lambda 函数集成的 Amazon API Gateway API 发出请求时,响应时间很慢。如何确定高延迟的原因?

解决方法

当与 Lambda 函数集成的 API 端点向客户端发送响应所需的时间过长时,必须解决高延迟问题。查看 API Gateway 的指标,以确定请求/响应流中导致高延迟的部分。确定高延迟的原因后,您可以努力减少延迟。

筛选 CloudWatch 指标以查看 API 上的延迟指标

要确定请求/响应流中导致高延迟的部分,请先执行以下步骤:

  1. 观察向 API 发送请求后客户端的延迟。
  2. 记下总体延迟后,打开 Amazon CloudWatch 控制台。从左侧导航窗格中选择 Metrics(指标)、All metrics(所有指标)。在指标搜索框中,输入 APIGateway。从搜索结果中,选择 API GatewayApiId
  3. 在 API 列表中,使用 API ID 或 API 名称筛选指定的 API。筛选后,选中 IntegrationLatency(集成延迟)和 Latency(延迟)复选框。
    **注意:**API ID 和 API 名称可从 API Gateway 控制台获得。
  4. 打开 Graphed metrics(已绘制指标)选项卡。对于 Statistic(统计数据),选择 Maximum(最大值)。对于 Period(周期),选择 1 minute(1 分钟)。在图表上方,选择 Custom(自定义)时间段。选择客户端遇到高延迟的时间范围。
  5. 查看 IntegrationLatency 和 Latency 指标。记下值和这些指标具有高值时的时间戳。这些值可以解释高延迟的原因。

比较指标以确定高延迟的原因

继续查看与请求/响应流相关的指标,以找出高延迟的原因:

  1. 将 API Gateway Latency 指标与在客户端观察到的总体延迟值进行比较。
    例如,API 的Latency指标的最大值约等于客户端的最大延迟值。这些值表明,请求/响应流中的最大延迟是 API Gateway 处理请求所花费的时间。API Gateway 处理时间包括向 Lambda 发送请求、等待 Lambda 响应以及向客户端发送响应所花费的时间。
  2. 将 API 的 IntegrationLatency 指标与 Latency 指标进行比较。
    例如,IntegrationLatency指标大约等于 Latency 指标。这些值表明 API 的延迟主要是由发送到 Lambda 的后端请求需要更长时间才能响应造成的。IntegrationLatency 指标包括 API Gateway 发送请求到 API Gateway 收到来自后端的响应之间的时间
  3. 如果与 API 的 Latency 指标相比,IntegrationLatency 指标较低,则后端响应时间较短。在这种情况下,处理 API 请求或响应需要更长的时间。
    例如,在 API 或 API Gateway Lambda 授权方中配置的映射模板都可能造成延迟。
  4. 当 API 的Latency 指标远低于在客户端观察到的延迟时,该路由可能会导致延迟。查看客户端和 API Gateway 之间的路由,确认是否有任何中间端点会增加延迟。
    例如,私有 VPN 连接或代理可能会造成延迟。

查看 Lambda 指标以确定 IntegrationLatency 过高的原因

最后,重点关注与请求/响应流相关的 Lambda 指标,找出 IntegrationLatency 过高的原因:

  1. 检查 Lambda 函数 Duration 指标,以确认 Lambda 函数的执行时间是否更长。如果 Lambda 函数的执行时间有所延长,请查看 CloudWatch 日志,以找出导致高延迟的代码部分。默认情况下,Lambda 函数在 CloudWatch 日志中记录 START、END 和 REPORT 语句。在 Lambda 函数代码的每个逻辑部分添加自定义日志语句以获取详细的 CloudWatch 日志。
  2. 如果 Duration 指标在客户端的高延迟期间没有变化,请确定初始化时间是否增加。Lambda 函数中的初始化时间是设置执行环境以处理请求所花费的时间。来自 API Gateway 的请求可能需要一个新的环境来处理。该过程通过 Lambda 设置。通常,存在于 Lambda 函数处理程序之外的代码在初始化期间运行。需要更长时间才能完成的代码可能会导致客户端的整体响应时间延迟。
    注意:初始化时间称为 INIT 或冷启动。
  3. 通过验证 Lambda 函数日志中的报告语句,确认初始化时间的 Duration 是否有所增加。某些请求的初始化时间过长可能会导致 API Gateway 的 IntegrationLatency 指标增加。

相关信息

使用 HTTP API 指标

Amazon API Gateway 维度和指标

使用 CloudWatch 指标监控 WebSocket API 的执行

在 CloudWatch 控制台上查看指标

Lambda 运行时环境生命周期

AWS 官方
AWS 官方已更新 1 年前