使用AWS re:Post即您表示您同意 AWS re:Post 使用条款

如何解决 CloudWatch 日志中的节流错误?

2 分钟阅读
0

我想解决 Amazon CloudWatch 日志中的节流错误。

简短描述

如果您在 CloudWatch 日志中超过了 API 速率限制,则可能会因 API 节流而收到 RequestLimitExceededThrottlingException 错误。请根据以下场景解决您的节流错误:

  • 当您访问日志时,CloudWatch 日志会出现间歇性节流。
  • 当您使用应用程序或脚本检索 CloudWatch 日志数据时,会出现 ThrottlingException 错误。
  • 当您将 PutLogEvents API 与 AWS Lambda 函数集成时,会出现节流错误。
  • 当您为其他 AWS 服务开启日志时,PutResourcePolicy:ResourceLimitExceeded 会出现节流错误。

解决方法

当您访问日志时,CloudWatch 日志会出现间歇性节流

FilterLogEventsGetLogEvents API 用于列出来自特定日志流或日志组的日志事件。这些 API 有硬性限制,且不符合增加限制的条件。如果您使用这些 API 搜索日志事件并达到硬性限制,则会出现 RateExceeded 错误。有关硬性限制的详细信息,请参阅 CloudWatch Logs 配额

以下是防止在这种情况下出现节流错误的最佳做法:

当您使用应用程序或脚本检索 CloudWatch 日志数据时,会出现 ThrottlingException 错误

收集器脚本用于收集 CloudWatch 日志,并使用 DescribeLogStreamGetLogEvents API 调用来提取数据。数据是从同一日志组中的不同日志流或不同时间范围中提取的。当您使用这些 API 时,可能会收到 ThrottlingException 错误。

以下是防止在这种情况下出现节流错误的最佳做法:

  • 在进行 API 调用时使用指数回退和重试。有关详细信息,请参阅指数回退和抖动以及重试行为
  • 使用结合随机掩码的计划操作在一段时间内分发您的 API。
  • 在连续的 API 调用之间添加睡眠间隔。此外,在从同一脚本或应用程序发送的 API 之间添加延迟。如果您快速连续发送 API,则更有可能发生速率错误。
  • 使用 Splunk 等 SIEM 解决方案从 CloudWatch 检索日志。SIEM 解决方案用于从多个系统收集数据并分析数据以检测异常行为。当您使用 Splunk 插件时,可能会遇到 API 节流。为防止出现此问题,请使用 Amazon Kinesis Data Firehose 创建 CloudWatch 日志订阅筛选器,并将日志数据交付给 Splunk。有关详细信息,请参阅 Splunk 网站上的为适用于 AWS 的 Splunk 插件配置 Kinesis 输入

当您将 PutLogEvents API 调用与 AWS Lambda 函数集成时,会出现节流错误

PutLogEvents API 用于将日志按 1 MB 分批上传到指定日志流。此 API 的默认速率限制为每个 AWS 区域每个账户 2500 TPS。以下区域的速率限制为 5000 TPS:

  • 美国东部(弗吉尼亚州北部)
  • 美国西部(俄勒冈州)
  • 欧洲地区(爱尔兰)
  • 欧洲地区(米兰)
  • 欧洲地区(巴黎)
  • 欧洲地区(斯德哥尔摩)

要解决这种情况下的 TPS 节流错误,请申请增加配额

当您为其他 AWS 服务开启日志时,PutResourcePolicy:ResourceLimitExceeded 会出现节流错误

PutResourcePolicy API 用于创建或更新策略,以允许其他 AWS 服务将日志事件放入特定账户。账户在每个区域最多可以有 10 个资源策略。这是硬性限制,无法增加。

要列出您在某个区域中的策略,请运行以下命令:

**注意:**将 example-region 替换为所需的区域。

$ aws logs describe-resource-policies --region example-region

要解决此节流错误,请使用 delete-resource-policy 命令删除任何不需要或未使用的资源策略。

另一种方法是将多个策略语句合并为一个策略。使用此方法可确保资源策略的数量不超过 10 的限制。

相关信息

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

AWS 官方
AWS 官方已更新 9 个月前