Amazon CloudWatch
用户指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

使用 Amazon CloudWatch 警报

您可以创建一个 CloudWatch 警报来监控单个 CloudWatch 指标,或基于 CloudWatch 指标监控数学表达式的结果。警报根据指标或表达式在多个时间段内相对于某阈值的值执行一项或多项操作。该操作可以是 Amazon EC2 操作、Amazon EC2 Auto Scaling 操作或发送到 Amazon SNS 主题的通知。

您也可以向 CloudWatch 控制面板添加警报,并以可视化方式监控它们。当某个警报位于控制面板上时,如果它处于 ALARM 状态,则会变成红色,便于您主动监控其状态。

警报仅为持续的状态更改调用操作。CloudWatch 警报不会仅因为它们处于特定状态而调用操作,状态必须已发生更改并保持指定数量的评估期。

因为状态改变而导致警报调用操作后,其后续行为取决于您关联到警报的操作类型。对于 Amazon EC2 Auto Scaling 操作,警报会在警报保持新状态的每个时间段中继续调用操作。对于 Amazon SNS 通知,不会调用额外操作。

注意

CloudWatch 不会测试或验证您指定的操作,也不会检测因试图调用不存在的操作而导致的任何 Amazon EC2 Auto Scaling 或 Amazon SNS 错误。请确保您的操作存在。

警报状态

警报可能具有以下几种状态:

  • OK – 指标或表达式在定义的阈值范围内。

  • ALARM – 指标或表达式超出定义的阈值。

  • INSUFFICIENT_DATA – 警报刚刚启动,指标不可用,或者指标没有足够的数据以确定警报状态。

评估警报

创建警报时,您指定三个设置,以支持 CloudWatch 评估何时更改警报状态:

  • Period (时间段) 是为创建警报的各个数据点而对该指标或表达式进行评估的时间长度。它以秒为单位。如果您选择一分钟以作为评估期,则每分钟具有一个数据点。

  • Evaluation Period (评估期) 是确定警报状态时要评估的最近时间段或数据点的数量。

  • Datapoints to Alarm (触发警报的数据点数) 是评估期内必须超出阈值才能触发警报变为 ALARM 状态的数据点数量。超出阈值的数据点不必是连续的,它们只需都在最近的几个(具体数目等于评估期)数据点之内。

在下图中,警报阈值设为 3 个单位。警报配置为变为 ALARM 状态,并且 Evaluation Period (评估期)Datapoints to Alarm (触发警报的数据点数) 均为 3。也就是说,在最近三个连续评估期中的所有现有数据点都高于阈值时,警报就会变为 ALARM 状态。在该图中,在第三个到第五个时间段发生了这种情况。在第六个时间段,数值降至阈值以下,因此其中一个时间段被评估为未超出阈值,且警报状态更改为 OK。在第九个时间段,再次超出阈值,但仅一个时间段超出阈值。因此,警报状态保持为 OK


        触发警报的警报阈值

在将评估期触发警报的数据点数配置为不同的值时,您将设置“M (最大为 N)”警报。Datapoints to Alarm (触发警报的数据点数) 为 (“M”),而 Evaluation Period (评估期) 为 (“N”)。评估间隔等于数据点数乘以评估期时长。例如,如果为 1 分钟的评估期配置 4 个数据点( 最大为 5 个数据点),则评估间隔为 5 分钟。如果为 10 分钟的评估期配置 3 个数据点(最大为 3 个数据点),则评估间隔为 30 分钟。

配置 CloudWatch 警报处理缺失数据的方式

有时,指标的某些带有警报的数据点不会报告给 CloudWatch。例如,当连接中断、服务器出现故障或指标设计为仅间歇性地报告数据时,可能会发生这种情况。

您可以通过 CloudWatch 指定在评估警报时如何处理缺失的数据点。这可帮助您对警报进行配置,使其在适合所监控的数据类型时变为 ALARM 状态。您可以在缺失数据不表示出现问题时避免误报。

与每个警报始终处于三种状态之一类似,向 CloudWatch 报告的每个特定数据点将属于以下三个类别之一:

  • 未超出 (在阈值范围内)

  • 超出 (超出阈值)

  • 缺失

对于每个警报,您可以指定 CloudWatch 将缺失数据点视为以下任一项:

  • notBreaching – 将缺失数据点视为“良好”,并在阈值范围内

  • breaching – 将缺失数据点视为“不好”,并超出阈值

  • ignore – 保持当前警报状态

  • missing – 在评估是否更改状态时,警报不考虑缺失数据点

最佳选择取决于指标的类型。对于持续报告数据的指标(例如,实例的 CPUUtilization),您可能希望将缺失数据点视为 breaching,因为它们可能表示出现了问题。但对于仅在错误发生时生成数据点的指标(如 Amazon DynamoDB 中的 ThrottledRequests),应将缺失数据视为 notBreaching。默认行为是 missing

为您的警报选择最佳选项可防止不必要和误导性的警报条件更改,还可以更准确地指示您的系统的运行状况。

在数据缺失时如何评估警报状态

无论您针对如何处理缺失数据设置什么值,当警报评估是否更改状态时,CloudWatch 都会尝试检索比 Evaluation Periods (评估期) 指定数量更多的数据点。它尝试检索的数据点的确切数量取决于警报期限长度,以及它是基于标准分辨率指标,还是基于高分辨率指标。它尝试检索的数据点的时间范围是评估范围

一旦 CloudWatch 检索这些数据点,便会发生以下情况:

  • 如果评估范围内的数据点没有缺失,CloudWatch 将根据最近收集的数据点来评估警报。

  • 如果评估范围内的一些数据点缺失,但是检索的现有数据点的数量等于或超过警报的 Evaluation Periods (评估期),则 CloudWatch 将根据已成功检索的最近现有数据点来评估警报状态。在此情况下,您针对如何处理缺失数据而设置的值便没有必要,并且将被忽略。

  • 如果评估范围内的一些数据点缺失,并且检索的现有数据点数量少于评估期的警报数量,则 CloudWatch 将在缺失数据点中填写您针对如何处理缺失数据而指定的结果,然后评估该警报。但是,评估范围内的任何实际数据点(无论何时报告)都包含在评估中。CloudWatch 尽可能少地使用缺失数据点。

在所有这些情况下,评估的数据点数等于评估期的值。如果超出阈值的数据点数少于触发警报的数据点数的值,则警报状态设置为 OK。否则,状态设置为 ALARM

注意

该行为的一种特殊情况是,在指标流停止后的一段时间内,CloudWatch 警报可能会反复重新评估最后一组数据点。如果警报在指标流即将停止之前更改了状态,这种重新评估可能会导致警报更改状态并重新执行操作。要缓解此行为,请使用较短时间段。

下表阐明了警报评估行为的示例。在第一个表中,Datapoints to Alarm (触发警报的数据点数)Evaluation Periods (评估期) 均为 3。CloudWatch 在评估警报时会检索最近的 5 个数据点。

第 2 列显示 3 个必需数据点中有多少个缺失。即使评估了最近的 5 个数据点,也只需要 3 个(Evaluation Periods (评估期间) 的设置)来评估警报状态。第 2 列中的数据点数是必须“填写”的数据点数(使用有关处理丢失数据的方式的设置)。

列 3-6 显示了针对应如何处理缺失数据的每项设置而设定的警报状态,如每列顶部所示。在数据点列中,0 是未超出阈值的数据点,X 是超出阈值的数据点,而 - 是缺失数据点。

数据点 缺失数据点数 MISSING IGNORE BREACHING NOT BREACHING

0 - X - X

0

OK

OK

OK

OK

0 - - - -

2

OK

OK

OK

OK

- - - - -

3

INSUFFICIENT_DATA

保留当前状态

ALARM

OK

0 X X - X

0

ALARM

ALARM

ALARM

ALARM

- - X - -

2

ALARM

保留当前状态

ALARM

OK

在上表的第二行中,即使将缺失数据视为超出阈值,警报也会保持 OK 状态,因为一个现有的数据点未超出阈值,并且该数据点与两个被视为超出阈值的缺失数据点一起进行评估。下次评估该警报时,如果数据仍缺失,它将变为 ALARM 状态,因为未超出阈值的数据点不再是检索的 5 个最近数据点之一。在第四行中,警报在所有情况下都会变为 ALARM 状态,由于具有足够的实际数据点,因此不需要考虑如何处理缺失数据的设置。

在下一个表中,Period (时间段) 再次设置为 5 分钟,并且 Datapoints to Alarm (触发警报的数据点数) 为 2,而 Evaluation Periods (评估期) 为 3。这是“N 中的 M”警报,其中 M 为 2,N 为 3。

数据点 缺失数据点数 MISSING IGNORE BREACHING NOT BREACHING

0 - X - X

0

ALARM

ALARM

ALARM

ALARM

0 0 X 0 X

0

ALARM

ALARM

ALARM

ALARM

0 - X - -

1

OK

OK

ALARM

OK

- - - - 0

2

OK

OK

ALARM

OK

- - X - -

2

ALARM

保留当前状态

ALARM

OK

如果创建警报后不久便有数据点缺失,并且该指标在您创建警报之前便已报告给 CloudWatch,则 CloudWatch 在评估警报时会检索从创建警报之前算起的最近数据点。

高精度警报

如果对高精度指标设置警报,您可以指定 10 秒或 30 秒时间段的高精度警报,也可以设置 60 秒的任意倍数时间段的定期警报。高精度警报的费用较高。有关高精度指标的更多信息,请参阅发布自定义指标

针对数学表达式的警报

您可以针对基于一个或多个 CloudWatch 指标的数学表达式的结果设置警报。用于警报的数学表达式可以包含多达 10 个指标。每个指标都必须使用相同的时间段。

对于基于数学表达式的警报,您可以指定您希望 CloudWatch 在评估警报时如何对待基础指标的缺失数据点。

基于数学表达式的警报无法执行 Amazon EC2 操作。

有关指标数学表达式和语法的更多信息,请参阅使用指标数学

基于百分位数的 CloudWatch 警报和小数据样本

当您将某个百分位数设置为某个警报的统计数据时,您可以指定在没有数量足以进行有效的统计评估的数据时执行什么操作。您仍然可以选择让警报评估统计数据,并可以更改警报状态。或者,您也可以让警报在样本大小过小时忽略指标,并等到有足够的数据来实现统计显着性时对样本进行评估。

对于介于 0.5 和 1.00 之间的百分位数,将在评估期内数据点数量少于 10/(1 个百分位) 个时使用此设置。例如,如果 p99 百分位上某个警报的样本数少于 1000 个,则会使用此设置。对于 0 和 0.5 之间的百分位数,当数据点数量少于 10/百分位数个时,将使用此设置。

CloudWatch 警报的常见功能

以下功能适用于所有 CloudWatch 警报:

  • 您最多可以为每个 AWS 账户在每个区域中创建 5000 个警报。要创建或更新警报,可以使用 PutMetricAlarm API 操作 (mon-put-metric-alarm 命令)。

  • 警报名称必须仅包含 ASCII 字符。

  • 使用 DescribeAlarms (mon-describe-alarms) 可以列出任何或所有目前配置过的警报以及处于特定状态的任何警报。可以根据时间范围对列表进行进一步筛选。

  • 使用 DisableAlarmActionsEnableAlarmActions (mon-disable-alarm-actionsmon-enable-alarm-actions) 可以禁用和启用警报。

  • 使用 SetAlarmState (mon-set-alarm-state) 可以将警报设为任意状态对其进行测试。此短暂状态变更只会持续到下一个警报比较发生之时。

  • 您可以在创建自定义指标之前使用 PutMetricAlarm (mon-put-metric-alarm) 创建警报。为了使警报有效,必须在警报定义中包含自定义指标的所有维度以及指标命名空间和指标名称。

  • 您可以使用 DescribeAlarmHistory (mon-describe-alarm-history) 查看警报的历史记录。CloudWatch 会将警报历史记录保存两个星期。每个状态转换都标有一个唯一的时间戳。个别情况下,一个状态变更的历史记录可能显示多个通知。通过时间戳可以确认独特的状态变更。

  • 警报的评估期数乘以每个评估期的长度不能超过一天。

注意

在特定情况下,某些 AWS 资源不会向 CloudWatch 发送指标数据。

例如,Amazon EBS 可能不会发送未附加到 Amazon EC2 实例的可用卷的指标数据,因为该卷没有要监控的指标活动。如果为此类指标设置了一个警报,您可能会注意到其状态变为 INSUFFICIENT_DATA。这可能表示资源处于不活动状态,并不一定表示出现了问题。