

# 限制
<a name="alarm-limits"></a>

## 常规 CloudWatch 配额
<a name="general-cloudwatch-quotas"></a>

有关适用于告警的常规 CloudWatch 服务配额的信息，请参阅 [CloudWatch 服务配额](cloudwatch_limits.md)。

## 基于 Metrics Insights 查询的告警适用的限制
<a name="metrics-insights-alarm-limits"></a>

使用 CloudWatch Metrics Insights 告警时，请注意以下功能限制：
+ 每个区域每个账户使用 Metrics Insights 查询产生的告警默认为 200 个
+ 只能使用最近 3 小时的数据来评估告警的情况。但告警详情页图表支持可视化展示最长两周的数据
+ 对多个时间序列进行评估的警报会将 ALARM 中的贡献者数量限制为 100 个
  + 假设查询检索到 150 个时间序列：
    +  如果 ALARM 中的贡献者少于 100 个（例如 95 个），则 `StateReason` 将为“被评估为 ALARM 的 150 个时间序列中的 95 个” 
    +  如果 ALARM 中有超过 100 个贡献者（例如 105 个），则 `StateReason` 将是“被评估为 ALARM 的 100 多个时间序列” 
  + 此外，如果属性的数量太大，ALARM 中的贡献者数量可以限制在 100 个以内。
+ Metrics Insights 对分析或返回的最大时间序列数量的限制适用
+ 在告警评估期间，`EvaluationState` 将设置为 `PARTIAL_DATA`，以满足以下限制：
  +  如果 Metrics Insights 查询返回超过 500 个时间序列。
  +  如果 Metrics Insights 查询匹配的指标超过 10000 个。

有关 CloudWatch 服务配额与限制的更多信息，请参阅 [CloudWatch Metrics Insights 服务配额](https://docs.amazonaws.cn/AmazonCloudWatch/latest/monitoring/cloudwatch-metrics-insights-limits.html)。

## 基于 PromQL 查询的警报适用的限制
<a name="promql-limits"></a>

使用 CloudWatch PromQL 警报时，请注意以下功能限制：
+ 对多个时间序列进行评估的警报会将 ALARM 中的贡献者数量限制为 100 个
  +  如果 ALARM 中的贡献者少于 100 个（例如 95 个），则 `StateReason` 将为“被评估为 ALARM 的 95 个时间序列” 
  +  如果 ALARM 中有超过 100 个贡献者（例如 105 个），则 `StateReason` 将是“被评估为 ALARM 的 100 多个时间序列” 
  + 此外，如果属性的数量太大，ALARM 中的贡献者数量可以限制在 100 个以内。
+ PromQL 查询对分析或返回的最大时间序列数量的限制适用
+ 在警报评估期间，如果 PromQL 查询返回的时间序列超过 500 个，则 `EvaluationState` 将设置为 `PARTIAL_DATA`。

## 基于连接的数据来源适用于告警的限制
<a name="MultiSource_Alarm_Details"></a>
+ 当 CloudWatch 评估警报时，即使警报的时间长于一分钟，也会每分钟评估一次。要使警报起作用，Lambda 函数必须能够返回从任何一分钟开始的时间戳列表，而不仅仅是周期长度的倍数。这些时间戳必须相隔一个周期长度。

  因此，如果 Lambda 查询的数据来源只能返回周期长度的倍数的时间戳，则该函数应对获取的数据“重新采样”以匹配 `GetMetricData` 请求所期望的时间戳。

  例如，每分钟评估一个周期为五分钟的警报，使用五分钟的窗口，每次偏移一分钟。在本例中：
  + 对于在 12:15:00 进行的警报评估，CloudWatch 预计数据点的时间戳为 `12:00:00`、`12:05:00` 和 `12:10:00`。
  + 然后，对于在 12:16:00 进行的警报评估，CloudWatch 预计数据点的时间戳为 `12:01:00`、`12:06:00` 和 `12:11:00`。
+ 当 CloudWatch 评估警报时，Lambda 函数返回的与预期时间戳不一致的任何数据点都将被丢弃，并使用剩余的预期数据点对警报进行评估。例如，当在 `12:15:00` 对警报进行评估时，其期望的数据的时间戳为 `12:00:00`、`12:05:00` 和 `12:10:00`。如果收到时间戳为 `12:00:00`、`12:05:00`、`12:06:00` 和 `12:10:00` 的数据，则 `12:06:00` 的数据将被丢弃，CloudWatch 会使用其他时间戳评估警报。

  然后，在 `12:16:00` 的下一次评估中，其期望的数据的时间戳为 `12:01:00`、`12:06:00` 和 `12:11:00`。如果只有时间戳为 `12:00:00`、`12:05:00` 和 `12:10:00` 的数据，则所有这些数据点都将在 12:16:00 被忽略，警报会根据您指定的警报处理缺失数据的方式转换状态。有关更多信息，请参阅 [告警评估](alarm-evaluation.md)。
+ 我们建议您创建这些警报，以便在其转换为 `INSUFFICIENT_DATA` 状态时采取行动，因为无论您设置警报以何种方式处理缺失数据，多个 Lambda 函数失败用例都会将警报转换为 `INSUFFICIENT_DATA`。
+ 如果 Lambda 函数返回一个错误：
  + 如果在调用 Lambda 函数时出现权限问题，则警报会根据您在创建警报时指定的缺失数据处理方式，开始进行缺失数据转换。
  + 任何其他来自 Lambda 函数的错误都会导致警报转换为 `INSUFFICIENT_DATA`。
+ 如果 Lambda 函数请求的指标有一定的延迟，以至于最后一个数据点总是缺失，则应采用相应的解决方法。您可以创建 M 个警报（共 N 个）或延长警报的评估周期。有关 M 个警报（共 N 个）的更多信息，请参阅 [告警评估](alarm-evaluation.md)。