如何确定我的 CloudWatch Logs 中的节流?

2 分钟阅读
0

我在使用 Amazon CloudWatch Logs 时收到了 “RequestLimitExceeded”或“ThrottlingException”错误,并且我的 API 调用被节流了。

简短描述

使用 CloudWatch Logs 时,您可能会超出 API 速率限制。发生这种情况时,您会收到 RequestLimitExceededThrottlingException 错误,并且您的 API 调用被节流。您必须确定节流发生的位置和时间,以便解决这些错误并就提高速率限制做出明智的申请。

解决方法

访问 CloudWatch Logs 的日志时进行间歇性节流

您可以使用 FilterLogEventsGetLogEvents API 调用来列出日志事件或日志流。这些 API 调用有硬限制,不符合提高限制的条件。这意味着,如果您使用 FilterLogEvents API 从指定的日志组中搜索日志事件,则默认 quaAPI 具有默认限额。此配额为每个账户或 AWS 区域 5 个事务/秒(TPS)。如果达到此限制,您将收到 RateExceeded 错误。

使用以下最佳实践来避免此使用案例中出现节流错误:

使用应用程序/脚本获取 CloudWatch 日志数据时出现 ThrottlingException 错误

要收集 CloudWatch 日志,您可以开发一个收集器脚本。此脚本尝试调用 DescribeLogStreamGetLogEvents API,以在同一日志组中提取来自不同日志流或不同时间段的数据。FilterLogEventsGetLogEventsDescribeLogStreams 等 API 调用专为人工交互而非自动化设计。这意味着您会收到错误消息,并且 API 调用会被节流。

使用以下最佳实践以避免此使用案例中出现节流:

  • 进行 API 调用时,请使用指数回退和重试。有关更多信息,请参阅指数回退和抖动以及 AWS 中的错误重试和指数回退
  • 随着时间的推移分发您的 API 调用。随机安排操作,以便它们随时间分布。
  • 在连续的 API 调用之间添加睡眠间隔。在从同一脚本或应用程序发送的 API 调用之间添加一些延迟。如果您快速连续发送 API 调用,则更有可能导致速率错误。
  • 在某些情况下,您可以使用 Splunk 等 SIEM 解决方案从 CloudWatch 中获取日志。SIEM 解决方案用于从多个系统收集数据并分析这些数据以检测异常行为。使用 Splunk 插件时,您可能会遇到 API 节流。为避免发生此问题,请使用 Amazon Kinesis Data Firehose 创建 CloudWatch Logs 订阅筛选条件,并将日志数据传输到 Splunk。有关更多信息,请参阅为适用于 AWS 的 Splunk 附加组件配置 Kinesis 输入的 Splunk 文档。

将 PutLogEvents API 调用与 Lambda 函数集成时出现节流错误

通过调用 PutLogEvents API,可以批量将日志上载到指定的日志流,每次 1MB。此 API 的速率限制为每个账户和每个区域 800 TPS。这不适用于以下区域,以下区域的限额为每个区域每个账户 1500 TPS:美国东部(弗吉尼亚州北部)、美国西部(俄勒冈州)和欧洲地区(爱尔兰)。您可以请求提高限额。

如需了解更多信息和请求提高限额,请参阅 CloudWatch Logs 限额

管理您的 CloudWatch Logs 服务限额

AWS 确定服务配额以保护性能和确保可用性。CloudWatch 具有指标、告警、API 请求和警告电子邮件通知的配额。使用以下步骤可视化您的服务限额,并在达到阈值时设置警报:

1.    打开 Service Quotas console(Service Quotas 控制台)。

2.    在导航窗格中,选择 AWS services(AWS 服务)。

3.    从 AWS services(AWS 服务)列表中,搜索 Amazon CloudWatch Logs

4.    Service quotas(服务限额)列表显示多个属性或选项:服务限额名称、应用的值(如果可用)、AWS 默认限额以及限额值是否可调。

5.    要查看有关服务限额的更多信息(如描述),请选择限额名称。

6.    选择限额名称后,您可以看到有关此限额的更多信息。例如,如果选择 GetLogEvents throttle limit in transactions per second(GetLogEvents 节流限制(每秒事务数)),您将看到以下几项:

说明

限额代码

限额 ARN

利用率:%

应用的限额值

AWS 默认限额值

可调:是/否

7.    在 Amazon CloudWatch alarms(Amazon CloudWatch 警报)部分,选择 Create alarm(创建警报),然后输入 Alarm threshold(警报阈值)和 Alarm name(警报名称)。


相关信息

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

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