创建复合警报 - Amazon CloudWatch
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

如果我们为英文版本指南提供翻译,那么如果存在任何冲突,将以英文版本指南为准。在提供翻译时使用机器翻译。

创建复合警报

复合警报是通过监视其他警报的警报状态来确定其警报状态的警报。

使用复合警报可以帮助您降低警报噪音。如果您设置复合警报来通知您状态变化,但将底层指标警报设置为不自行发送通知,则只有当复合警报的警报状态发生变化时,您才会收到通知。例如,您可以基于 CPU 利用率和磁盘读取操作创建指标警报,并指定对于这些警报从不执行操作。然后,您可以创建一个复合警报,仅当这两个指标警报处于 ALARM(警报)状态时,此复合警报才进入 ALARM(警报)状态并通知您。

在复合警报中,所有底层警报必须位于同一 AWS 区域和同一账户中。

目前,复合警报可以执行的唯一警报操作是通知 SNS 主题。

规则表达式

每个复合警报包括 规则表达,它指定要评估哪些其他报警以确定复合报警的状态。对于您在规则表达式中引用的每个警报,您需要指定一个函数来指定警报是否需要处于 ALARM(警报)状态、OK(正常)状态或 INSUFFICIENT_DATA(数据不足)状态。您可以使用运算符(AND、OR 和 NOT)在单个表达式中组合使用多个函数。您可以使用括号对表达式中的函数进行逻辑分组。

规则表达式可以同时引用指标警报和其他复合警报。

函数可包含以下内容:

  • 如果指定的警报处于 ALARM(警报)状态,则 ALARM("alarm-name or alarm-ARN") 为 TRUE。

  • 如果指定的警报处于 OK(正常)状态,则 OK("alarm-name or alarm-ARN") 为 TRUE。

  • 如果指定的警报处于 INSUFFICIENT_DATA(数据不足)状态,则 INSUFFICIENT_DATA("alarm-name or alarm-ARN") 为 TRUE。

  • TRUE 始终计算为 TRUE。

  • FALSE 始终计算为 FALSE。

TRUE 和 FALSE 对于测试复杂的 AlarmRule 结构和测试警报操作很有用。

下面是 AlarmRule 的一些示例:

  • ALARM(CPUUtilizationTooHigh) AND ALARM(DiskReadOpsTooHigh) 指定仅当 CPUUtilizationTooHigh 和 DiskReadOpsTooHigh 警报处于 ALARM(警报)状态时,复合警报才会进入 ALARM(警报)状态。

  • ALARM(CPUUtilizationTooHigh) AND NOT ALARM(DeploymentInProgress) 指定如果 CPUUtilizationTooHigh 处于 ALARM(警报)状态并且 DeploymentInProgress 不处于 ALARM(警报)状态,警报进入 ALARM(警报)状态。此示例减少了已知部署时段期间的警报噪音。

  • 如果 CPUUtilizationTooHigh 或 DiskReadOpsTooHigh 处于 ALARM(警报)状态,并且 NetworkOutTooHigh 处于 OK(正常)状态,则 (ALARM(CPUUtilizationTooHigh) OR ALARM(DiskReadOpsTooHigh)) AND OK(NetworkOutTooHigh) 进入 ALARM(警报)状态。这提供了使用复合警报来防止噪音的另一个示例。此规则可确保如果同时发生已知的网络问题,不会通过针对高 CPU 或磁盘使用率的警报操作来通知您。

AlarmRule 可以指定多达100个“子”报警。AlarmRule 表达式可以有多达 500 个元素。元素是子警报、TRUE 或 FALSE 语句和括号。一对括号可视为一个元素。

规则表达必须至少包含一个子报警或至少一个TRUE语句或FALSE语句。

创建复合警报

  1. 通过以下网址打开 CloudWatch 控制台:https://console.amazonaws.cn/cloudwatch/

  2. 在导航窗格中,选择 Alarms (警报)

  3. 在警报列表中,选中要在新复合警报中引用的每个现有警报旁边的复选框。然后选择 Create composite alarm (创建复合警报)

  4. Conditions (条件) 框中,指定复合警报将使用的规则表达式。最初,将列出您选择的警报,并由 OR 逻辑运算符进行联接。每个警报都指定了 ALARM(警报)状态。

    您可以修改正在创建的复合警报的警报条件:

    1. 对于列出的每个底层警报,您可以将所需的状态从 ALARM(警报)更改为 OK(正常)或 INSUFFICENT_DATA(数据不足)。

    2. 您可以将每个 OR 运算符更改为 AND 或 NOT。您还可以添加括号来对逻辑运算符进行分组。

    3. 您可以向复合警报条件添加更多警报。您还可以删除 Conditions (条件) 框中当前列出的警报。

    例如,您可以指定以下条件来创建一个复合警报,如果 CPUUtilizationTooHighDiskReadOpsTooHigh 处于ALARM(警报)状态,同时 NetworkOutTooHigh 处于 OK(正常)状态,则该复合警报进入 ALARM(警报)状态。

    (ALARM("CPUUtilizationTooHigh") OR ALARM("DiskReadOpsTooHigh")) AND OK("NetworkOutTooHigh")
  5. 当您对警报条件感到满意时,请选择 Next (下一步)

  6. Notification (通知) 下,选择要在复合警报更改状态时通知的 SNS 主题。

    要使警报根本不发送通知或采取任何操作,请选择 Remove (删除)

    要让警报为相同警报状态或不同警报状态发送多个通知,请选择添加通知

  7. 在完成后,选择下一步

  8. 输入警报的名称和说明。名称只能包含 ASCII 字符。然后,选择 Next (下一步)

  9. Preview and create 下面,确认具有所需的信息和条件,然后选择 Create alarm

注意

可以创建复合警报的循环,其中复合警报 A 依赖于复合警报 B,复合警报 B 也依赖于复合警报 A。在这种情况下,您无法删除任何作为循环一部分的复合警报,因为始终有一个复合警报依赖于您要删除的警报。

要摆脱这种情况,您必须通过更改循环中其中一个复合警报的规则来删除创建循环的依赖关系,从而打破循环。用于打破循环的最简单的更改是将其中一个警报的 AlarmRule 更改为 False

此外,如果 CloudWatch 检测到评估路径中有一个循环,复合警报的评估将停止。