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

1 分钟阅读
0

我在 Amazon CloudWatch 中收到 PutMetricData API 调用的错误“400 ThrottlingException”。

简短描述

当您在 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>

为了提高服务性能,CloudWatch 会根据 AWS 区域限制每个 AWS 账户的请求数。有关当前 PutMetricData API 请求配额的信息,请参阅 CloudWatch 服务限额

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

解决方法

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

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

相关信息

CloudWatch API 参考

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