使用 Amazon CloudWatch 告警 - Amazon CloudWatch
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

使用 Amazon CloudWatch 告警

在 CloudWatch 中,您可以同时创建指标告警复合告警

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

  • 复合告警包括一个规则表达式,该表达式考虑您已创建的其他告警的告警状态。只有当规则的所有条件都得到满足时,复合告警才会进入“ALARM(告警)”状态。在复合告警的规则表达式中指定的告警可以包括指标告警和其他复合告警。

    使用复合告警可以减少告警噪音。您可以创建多个指标告警,还可以创建复合告警并仅为复合告警设置提示。例如,只有当所有底层指标告警都处于“ALARM(告警)”状态时,复合告警才可能进入“ALARM(告警)”状态。

    复合告警可以在改变状态时发送 Amazon SNS 通知,并且可以在进入“ALARM(告警)”状态时创建 Systems Manager OpsItems 或事件,但无法执行 EC2 操作或 Auto Scaling 操作。

在账户中创建的告警数量不限。

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

告警仅在告警状态更改时才会调用操作。使用 Auto Scaling 操作的告警除外。对于 Auto Scaling 操作,告警会在告警保持新状态时以每分钟一次的频率持续调用操作。

告警可以在同一账户中监视指标。如果您在 CloudWatch 控制台中启用了跨账户功能,则还可以创建告警,以监视其他 Amazon 账户。不支持创建跨账户复合告警。支持创建使用数学表达式的跨账户告警,但跨账户告警不支持 ANOMALY_DETECTION_BANDINSIGHT_RULESERVICE_QUOTA 函数。

注意

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

指标告警状态

指标告警可能具有以下几种状态:

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

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

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

评估告警

创建告警时,请指定三个设置,以启用 CloudWatch 评估在何时更改告警状态:

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

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

  • Datapoints to Alarm(触发告警的数据点数)是评估期内必须违例才能触发告警变为 ALARM(告警)状态的数据点数量。超出阈值的数据点不必是连续的,但它们必须全部在等于 Evaluation Period(评估期)的最近几个数据点范围内。

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


        触发告警的阈值

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

注意

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

告警操作

您可以指定告警在“OK(正常)”、“ALARM(告警)”和“INSUFFICIENT_DATA(数据不足)”状态之间更改状态时所执行的操作。最常见的告警操作类型是通过向 Amazon Simple Notification Service 主题发送消息来通知一人或多人。有关 Amazon SNS 的更多信息,请参阅什么是 Amazon SNS?

基于 EC2 指标的告警还可以执行 EC2 操作,例如停止、终止、重启或恢复 EC2 实例。有关更多信息,请参阅 创建告警以停止、终止、重启或恢复 EC2 实例

告警还可以执行操作来扩展 Auto Scaling 组。有关更多信息,请参阅 Amazon EC2 Auto Scaling 的步进和简单扩展策略

您还可以将告警配置为在 Systems Manager Ops Center 中创建 OpsItems,或在 Amazon Systems Manager Incident Manager 中创建事件。只有在告警进入“ALARM(告警)”状态时才能执行这些操作。有关更多信息,请参阅 CloudWatch 配置为通过告警创建 OpsItems 事件创建

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

有时,并非指标的每个预期数据点都会报告到 CloudWatch。例如,当连接中断、服务器出现故障或指标设计为仅间歇性地报告数据时,可能会发生这种情况。

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

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

  • 未违例(在阈值范围内)

  • 违例(超出阈值)

  • Missing

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

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

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

  • ignore(忽略)– 保持当前告警状态

  • missing(缺失)– 如果告警评估范围内的所有数据点都缺失,则告警将转变为“INSUFFICIENT_DATA(数据不足)”状态。

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

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

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

每当告警评估是否更改状态时,CloudWatch 都会尝试检索高于 Evaluation Periods(评估期)指定的数量的数据点数。它尝试检索的数据点的确切数量取决于告警期限长度,以及它是基于标准分辨率指标,还是基于高分辨率指标。它尝试检索的数据点的时间范围是评估范围

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

  • 如果评估范围内的数据点没有缺失,CloudWatch 将根据最近收集的数据点来评估告警。评估的数据点数等于告警的 Evaluation Periods(评估期)。在评估范围内,不需要额外的数据点,因此它们将被忽略。

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

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

注意

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

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

由于评估范围为 5,因此第 1 列显示最近的 5 个数据点。数据点显示为:右侧为最近的数据点,0 是未违例数据点,X 是违例数据点,而 - 是缺失数据点。

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

在第 3 – 6 列中,列标题是如何处理缺少数据的可能值。这些列中显示了为处理缺失数据的每种可能方法设置的告警状态。

数据点 必须填写的数据点数 缺失 忽略 违例 未违例

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

Retain current state

ALARM

OK

在上表的第二行中,即使将缺失数据视为违例,告警也会保持 OK(正常)状态,因为一个现有的数据点未违例,并且该数据点与两个被视为违例的缺失数据点一起进行评估。下次评估该告警时,如果数据仍缺失,它将变为 ALARM(告警)状态,因为未违例数据点不再处于评估范围内。

第三行(所有五个最新数据点都缺失)说明了缺失数据处理方式的各种设置对告警状态的影响。如果缺失的数据点被视为违例,告警将进入“ALARM(告警)”状态,而如果它们被视为未违例,则告警进入“OK(正常)”状态。如果忽略缺少的数据点,告警将保留缺失数据点之前的当前状态。如果缺少的数据点被认为已缺失,则告警没有足够的最新真实数据来进行评估,并变为“INSUFFICIENT_DATA(数据不足)”状态。

在第四行,告警转到 ALARM(告警)状态,因为三个最近的数据点违例,而告警的 Evaluation Periods(评估期)Datapoints to Alarm(触发告警的数据点数)都设为 3。在这种情况下,缺失的数据点将被忽略,并且不需要缺失数据评估方式的设置,因为有 3 个实际数据点需要评估。

第 5 行表示告警评估的特殊情况,称为提前告警状态。有关更多信息,请参阅 避免提前转换到告警状态

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

评估范围为 5。这是最近检索到的数据点的最大数目,可以在某些数据点丢失的情况下使用这些数据点。

数据点 缺失数据点数 缺失 忽略 违例 未违例

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

在第 1 行和第 2 行中,告警始终处于“ALARM(告警)”状态,因为 3 个最近的数据点中有 2 个违例。在第 2 行中,不需要评估范围内的两个最早的数据点,因为 3 个最近的数据点中无一缺失,因此这两个较旧的数据点将被忽略。

在第 3 行和第 4 行中,只有当缺失的数据被视为违例时,告警才会进入“ALARM(告警)”状态,在这种情况下,两个最近丢失的数据点都被视为违例。在第 4 行中,这两个被视为违例的缺失数据点提供了两个触发“ALARM(告警)”状态所必要的违例数据点。

第 5 行表示告警评估的特殊情况,称为提前告警状态。有关更多信息,请参阅以下部分。

避免提前转换到告警状态

CloudWatch 告警评估包括用于尝试避免误报的逻辑,当数据出现间歇性时,告警会提前进入告警状态。上一节表中的第 5 行中显示的示例说明了这种逻辑。在这些行中,以及在以下示例中,Evaluation Periods(评估期)为 3,评估范围为 5 个数据点。Datapoints to Alarm(触发告警的数据点数)为 3,M(最大为 N)示例除外,其中 Datapoints to Alarm(触发告警的数据点数)为 2。

假设告警的最新数据是 - - - - X,其中有四个缺失的数据点,然后一个违例数据点作为最新的数据点。由于下一个数据点可能未违例,因此当数据处于 - - - - X 或者 - - - X -,且 Datapoints to Alarm(触发告警的数据点数)为 3 时,告警不会立即进入“ALARM(告警)”状态。这样,当下一个数据点未违例并导致数据为 - - - X O 或者 - - X - O 时,误报得以避免。

但是,如果最后几个数据点是 - - X - -,即使缺失的数据点被视为缺失,告警也会进入“ALARM(告警)”状态。这是因为根据告警的设计,当在数据点数量 Evaluation Periods(评估期)间最早的可用的违例数据点至少与 Datapoints to Alarm(触发告警的数据点数)的值同样早,并且所有其他较新的数据点都违例或缺失时,告警都会进入“ALARM(告警)”状态。在这种情况下,即使可用数据点的总数小于 M(Datapoints to Alarm(触发告警的数据点数)),告警也会进入“ALARM(告警)”状态。

此告警逻辑也适用于 M(最大为 N)告警。如果评估范围内最早的违例数据点至少与 Datapoints to Alarm(触发告警的数据点数)的值同样早,并且所有最新的数据点均违例或缺失,则无论 M 值(Datapoints to Alarm(触发告警的数据点数))如何,告警都会进入“ALARM(告警)”状态。

高精度告警

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

针对数学表达式的告警

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

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

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

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

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

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

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

CloudWatch 告警和 Amazon EventBridge

每当 CloudWatch 告警更改告警状态时,CloudWatch 都会将事件发送到 Amazon EventBridge。您可以使用这些告警状态更改事件在 EventBridge 中触发事件目标。有关更多信息,请参阅 告警事件和 EventBridge

CloudWatch 告警的常见功能

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

  • 您可以创建的告警数量没有限制。要创建或更新告警,请使用 CloudWatch 控制台、PutMetricAlarm API 操作,或 Amazon CLI 中的 put-metric-alarm 命令。

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

  • 您可以使用 CloudWatch 控制台、DescribeAlarms API 操作,或 Amazon CLI 中的 describle-alarms 命令来列出任何或所有当前已配置的告警和列出任意特定状态的告警。

  • 您可以使用 DisableAlarmActionsEnableAlarmActions API 操作或 Amazon CLI 中的 disable-alarm-actionsenable-alarm-actions 命令来禁用或启用告警。

  • 您可以使用 SetAlarmState API 操作或 Amazon CLI 中的 set-alarm-state 命令将告警设为任意状态,以对其进行测试。此短暂状态变更只会持续到下一个告警比较发生之时。

  • 您可以在创建自定义指标之前为该自定义指标创建告警。为了使告警有效,必须在告警定义中包含自定义指标的所有维度以及指标命名空间和指标名称。要执行此操作,您可以使用 PutMetricAlarm API 操作,或 Amazon CLI 中的 put-metric-alarm命令。

  • 您可以使用 CloudWatch 控制台、DescribeAlarmHistory API 操作,或 Amazon CLI 中的 describe-alarm-history 命令查看告警的历史记录。CloudWatch 可将告警历史记录保存两个星期。每个状态转换都标有一个唯一的时间戳。个别情况下,一个状态变更的历史记录可能显示多个通知。通过时间戳可以确认独特的状态变更。

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

注意

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

例如,Amazon EBS 可能不会发送未附加到 Amazon EC2 实例的可用卷的指标数据,因为该卷没有要监控的指标活动。如果为此类指标设置了一个告警,您可能会注意到其状态变为 INSUFFICIENT_DATA(数据不足)。这可能表示资源处于不活动状态,并不一定表示出现了问题。您可以指定每个告警如何处理丢失数据。有关更多信息,请参阅 配置 CloudWatch 告警处理缺失数据的方式