我在 CloudWatch API 中调用 PutMetricData 时如何避免限流?

上次更新时间:2019 年 8 月 12 日

我在 Amazon CloudWatch 中收到 PutMetricData API 调用的错误 400 ThrottlingException,其具体响应如下:

<ErrorResponse xmlns="http://monitoring.amazonaws.com/doc/2010-08-01/">
  <Error>
    <Type>Sender</Type>
    <Code>Throttling</Code>
    <Message>Rate exceeded</Message>
  </Error>
  <RequestId>2f85f68d-980b-11e7-a296-21716fd2d2e3</RequestId>
</ErrorResponse>

简短描述

按每个区域限制每个 Amazon Web Services (AWS) 账户的 CloudWatch 请求,以帮助提高服务性能。有关当前 PutMetricData API 请求限制的信息,请参阅 CloudWatch 限制

注意:一个 AWS 区域中对 PutMetricData API 的所有调用均计入最大允许请求速率。此数字包括任何自定义或第三方应用程序的调用,如 CloudWatch 代理、AWS 命令行界面 (AWS CLI) 或 AWS 管理控制台的调用。

解决方法

最佳做法是使用下列方法减少您的调用速率及避免 API 限流:

  • 在一段时间内均匀分配您的 API 调用,而不是在短时间内进行多个 API 调用。如果您要求在一分钟解决数据提供问题,您将有整整一分钟的时间来发出该指标。使用抖动(随机延迟)在各个不同时间点发送数据点。
  • 将尽可能多的指标合并到一个 API 调用中。例如,一个 PutMetricData 调用可以包含 20 个指标和 150 个数据点。您还可以使用 StatisticSet预先聚合的数据集来发布聚合数据点,从而减少每秒 PutMetricData 调用的次数。
  • 使用指数回退和抖动重试调用。

如果您仍然需要较高的限制,您可以请求提高限制。提高速率限制可能会对您的 AWS 账单造成很大的财务影响。请务必在请求提高速率限制前尝试先前所述的方法,以避免 API 限流。如果您请求提高限制,请务必提供以下信息:

  • 您的应用程序难以遵照最佳实践的原因。
  • 您以最高速率进行 PutMetricData 调用并遇到限流时的大致日期/时间范围(包括您所在的时区)。

这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?