我在处理 Amazon CloudWatch 日志时收到“RequestLimitExceeded”或“ThrottlingException”错误,而且我的 API 调用受到了节流。
简短描述
当您使用 CloudWatch 日志时,可能会超过 API 速率配额。发生这种情况时,您的 API 调用会受到节流,并且您会收到 RequestLimitExceeded 或 ThrottlingException 错误。要解决这些错误,请确定节流错误发生的地点和时间。然后,根据所知信息,提出提高速率配额的请求。
解决方法
访问日志时 CloudWatch Logs 出现间歇性节流错误
要列出您的日志事件或日志流,请使用 FilterLogEvents 或 GetLogEvents API 调用。这些 API 调用不符合增加配额的条件。但是,当您使用 FilterLogEvents API 来搜索指定日志组中的日志事件时,会有配额。配额为每个 AWS 账户或 AWS 区域每秒五个事务 (TPS)。如果您达到此配额,则会收到 RateExceeded 错误。
为避免这些节流错误,请使用订阅筛选器,立即从 CloudWatch 日志中实时检索日志数据。有关详细信息,请参阅日志组级别订阅筛选器和使用订阅实时处理日志数据。
使用 CloudWatch Logs Insights 快速从 CloudWatch 日志中获取日志数据也是一种最佳实践。要查看特定的日志组,使用查询来筛选日志。确保将日志数据导出到 Amazon Simple Storage Service (Amazon S3) 以用于批量用例。
**注意:**处理日志数据最多需要 12 个小时才能从 CloudWatch Logs 中导出数据。使用这种方法进行实时分析和处理不是最佳实践。
使用脚本检索 CloudWatch 日志数据时出现 ThrottlingException 错误
要收集 CloudWatch 日志,您可以开发收集器脚本。要从同一日志组中的不同日志流或不同时间段提取数据,请创建调用 DescribeLogStreams 或 GetLogEvents API 的脚本。但是,诸如 FilterLogEvents、GetLogEvents 和 DescribeLogStreams 之类的 API 调用是为人机交互而设计的,而不是为自动化而设计的。如果您在脚本中使用这些 API,则 API 调用会受到节流,并且您会收到错误消息。
为避免在此用例中出现节流错误,请在进行 API 调用时使用指数回退和重试。有关详细信息,请参阅指数回退和抖动以及重试行为。确保在一段时间内分配您的 API 调用。随机安排动作,使其分布在一段时间内。
如果您快速连续发送 API 调用,可能会导致速率错误。为避免此问题,请在连续的 API 调用之间添加睡眠间隔。此外,在同一脚本或应用程序发送的 API 调用之间添加延迟。
当您使用诸如 Splunk 之类的安全信息和事件管理 (SIEM) 解决方案从 CloudWatch 检索日志时,Splunk 插件可能会导致 API 节流错误。为避免此问题,请使用 Amazon Data Firehose 创建 CloudWatch 日志订阅筛选条件。然后,将日志数据传送到 Splunk。有关更多信息,请参阅 Splunk 网站上的Amazon Web Services 的 Splunk 插件简介。
当您将 PutLogEvents API 调用与 Lambda 函数集成时,出现节流错误
当您将 PutLogEvents API 调用与 AWS Lambda 函数集成时,PutLogEvents 会以 1 MB 的批次大小将日志上传到指定的日志流。此 API 的速率配额为每个区域每个账户每秒 5,000 个事务。
如需更多信息并申请增加配额,请参阅 CloudWatch Logs 配额。
管理您的 CloudWatch Logs 服务配额
AWS 为服务定义配额,以保护性能和确保可用性。CloudWatch 对指标、警报、API 请求和警报电子邮件通知都有配额。要查看您的服务配额并设置在达到阈值时发送警报,请完成以下步骤:
- 打开服务配额控制台。
- 在导航窗格中,选择 AWS services(AWS 服务)。
- 在 AWS 服务列表中,搜索 Amazon CloudWatch logs。
- 服务配额列表向您显示了多个属性或选项:服务配额名称、应用的值(如果可用)、AWS 默认配额,以及配额值是否可调整。
- 要查看有关服务配额的更多信息,请选择配额名称。例如,如果您选择 GetLogEvents throttle limit in transactions per second(GetLogEvents 每秒事务量节流值),则会看到以下项目:
Description(描述)
Quota code(配额码)
Quota ARN(配额 ARN)
Utilization: %(利用率:%)
Applied quota value(应用的配额值)
AWS default quota value(AWS 默认配额值)
Adjustable: Y/N(可调节:是/否)
- 在 Amazon CloudWatch 警报部分中,选择 Create alarm(创建警报),然后输入警报阈值和警报名称。
相关信息
在 CloudWatch API 中调用 PutMetricData 时如何避免节流?