我想解决 Amazon CloudWatch 日志中的节流错误。
简短描述
如果您在 CloudWatch 日志中超过了 API 速率限制,则可能会因 API 节流而收到 RequestLimitExceeded 或 ThrottlingException 错误。请根据以下场景解决您的节流错误:
- 当您访问日志时,CloudWatch 日志会出现间歇性节流。
- 当您使用应用程序或脚本检索 CloudWatch 日志数据时,会出现 ThrottlingException 错误。
- 当您将 PutLogEvents API 与 AWS Lambda 函数集成时,会出现节流错误。
- 当您为其他 AWS 服务开启日志时,PutResourcePolicy:ResourceLimitExceeded 会出现节流错误。
解决方法
当您访问日志时,CloudWatch 日志会出现间歇性节流
FilterLogEvents 和 GetLogEvents API 用于列出来自特定日志流或日志组的日志事件。这些 API 有硬性限制,且不符合增加限制的条件。如果您使用这些 API 搜索日志事件并达到硬性限制,则会出现 RateExceeded 错误。有关硬性限制的详细信息,请参阅 CloudWatch Logs 配额。
以下是防止在这种情况下出现节流错误的最佳做法:
当您使用应用程序或脚本检索 CloudWatch 日志数据时,会出现 ThrottlingException 错误
收集器脚本用于收集 CloudWatch 日志,并使用 DescribeLogStream 或 GetLogEvents 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 时如何避免节流?