Amazon CloudWatch
用户指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

创建警报以停止、终止、重启或恢复实例

利用 Amazon CloudWatch 警报操作,您可创建自动停止、终止、重启或恢复 EC2 实例的警报。当不再需要某个实例运行时,您可使用停止或终止操作来帮助您节省资金。如果发生了系统损害,您可使用重启和恢复操作自动重启这些实例或将它们恢复到新硬件上。

您创建的每个警报操作均使用警报操作 ARN。一组 ARN 更安全,因为它要求您的账户中有 EC2ActionsAccess IAM 角色。利用此 IAM 角色,您可执行停止、终止或重启操作 - 以前如果您使用的是 IAM 角色,则无法执行操作。使用以前的警报操作 ARN 的现有警报不需要此 IAM 角色,但建议您在编辑使用这些 ARN 的现有警报时更改 ARN 并添加此角色。

注意

IAM 角色 EC2ActionsAccess 不用于恢复操作。

EC2ActionsAccess IAM 角色使 AWS 能够代表您执行警报操作。当您首次使用 Amazon EC2 或 Amazon CloudWatch 控制台创建警报操作时,AWS 将自动为您创建此角色。

在许多情况下,您可能需要自动终止或停止实例。例如,您可能拥有专用于批工资单处理工作或科学计算任务的实例,这些实例在运行一段时间后就完成了其工作。与其让这些实例空闲 (并产生费用),不如将其停止或终止以节省开支。使用停止警报操作和终止警报操作的主要区别是,停止的警报可以在需要时轻松重启,还可以保留相同的实例 ID 和根卷。而终止的实例则无法重新启动。如此就必须启动一个新的实例。

您可以向为 Amazon EC2 每个实例指标设置的任何警报添加停止、终止、重启或恢复操作,这些指标包括 Amazon CloudWatch 提供的基本和详细监控指标 (在 AWS/EC2 命名空间中),以及包含“InstanceId=”维度的任何自定义指标,只要 InstanceId 值引用有效运行的 Amazon EC2 实例。

控制台支持

可使用 CloudWatch 控制台或 Amazon EC2 控制台创建警报。本文档中的过程使用 CloudWatch 控制台。有关使用 Amazon EC2 控制台的过程,请参阅 Amazon EC2 用户指南(适用于 Linux 实例) 中的创建停止、终止、重新启动或恢复实例的警报

权限

如果您要使用 AWS Identity and Access Management (IAM) 账户创建或修改警报,则必须拥有以下权限:

  • ec2:DescribeInstanceStatusec2:DescribeInstances - 针对有关 Amazon EC2 实例状态指标的所有警报

  • ec2:StopInstances - 针对包含停止操作的警报

  • ec2:TerminateInstances - 针对包含终止操作的警报

  • ec2:DescribeInstanceRecoveryAttributeec2:RecoverInstances - 针对包含恢复操作的警报

如果您拥有对 Amazon CloudWatch 而不是 Amazon EC2 的读/写权限,则仍然可以创建警报,但无法对实例执行停止或终止操作。但是,如果您之后获得使用相关 Amazon EC2 API 的权限,将会执行之前创建的警报操作。有关更多信息,请参阅 IAM 用户指南 中的权限与策略

如果您想要通过警报操作来使用 IAM 角色停止、终止或重启实例,则只能使用 EC2ActionsAccess 角色。其他 IAM 角色不受支持。如果您正在使用其他 IAM 角色,则无法停止、终止或重启实例。但是,您仍然可以查看警报状态和执行任何其他操作,如 Amazon SNS 通知或 Auto Scaling 策略。

向 Amazon CloudWatch 警报添加停止操作

可以创建当达到一定阈值后停止 Amazon EC2 实例的警报。例如,您可能运行了开发或测试实例而偶尔忘记将其关闭。可以创建当平均 CPU 利用率低于 10% 达 24 小时时触发的警报,同时告知其为空闲并不再使用。可以根据需要调整阈值、时长和时间段,还可以添加 SNS 通知,以便您在触发警报后能够收到电子邮件。

可以停止或终止将 Amazon Elastic Block Store 卷用作根设备的 Amazon EC2 实例,但只能终止将实例存储用作根设备的实例。

使用 Amazon CloudWatch 控制台创建停止空闲实例的警报

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

  2. 在导航窗格中,选择 Alarms

  3. 选择 Create Alarm

  4. 对于 Select Metric 步骤,执行以下操作:

    1. EC2 Metrics 下,选择 Per-Instance Metrics

    2. 选择包含实例和 CPUUtilization 指标的行。

    3. 对于统计数据,选择 Average

    4. 选择时段 (例如 1 Hour)。

    5. 选择 Next

  5. 对于 Define Alarm 步骤,执行以下操作:

    1. Alarm Threshold 下,键入警报的唯一名称 (例如“Stop EC2 instance”) 和警报的描述 (例如“Stop EC2 instance when CPU is idle too long”)。警报名称必须仅包含 ASCII 字符。

    2. Whenever 下,为 is 选择 < 并键入 10。对于 for,键入 24 作为连续时段数。

      Alarm Preview (警报预览) 下会显示阈值的图形表示。

    3. Notification 下,为 Send notification to 选择一个现有 SNS 主题或创建一个新 SNS 主题。

      要创建 SNS 主题,请选择 New list。对于 Send notification to,键入 SNS 主题的名称 (例如“Stop_EC2_Instance”),并为 Email list 键入在警报状态变为 ALARM 时要将通知发送到的一系列电子邮件地址 (用逗号分隔)。将向每个电子邮件地址发送一封主题订阅确认电子邮件。您必须先确认订阅,然后才能将通知发送到电子邮件地址。

    4. 选择 EC2 Action

    5. EC2 Action 下,为 Whenever this alarm 选择 State is ALARM。对于 Take this action,选择 Stop this instance

    6. 如果出现提示,请选择 Create IAM role: EC2ActionsAccess 以自动创建 IAM 角色,这样在此警报触发时 AWS 可自动代表您停止实例。

    7. 选择 Create Alarm

向 Amazon CloudWatch 警报添加终止操作

可以创建当达到一定阈值时自动终止 EC2 实例的警报 (只要该实例未启用终止保护)。例如,某个实例已经完成工作,您不再需要此实例而希望将其终止。如果可能在之后使用该实例,则应该选择停止而不是终止。有关对实例启用和禁用终止保护的信息,请参阅Amazon EC2 用户指南(适用于 Linux 实例) 中的为实例启用终止保护

使用 Amazon CloudWatch 控制台创建终止空闲实例的警报

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

  2. 在导航窗格中,选择 Alarms

  3. 选择 Create Alarm

  4. 对于 Select Metric 步骤,执行以下操作:

    1. EC2 Metrics 下,选择 Per-Instance Metrics

    2. 选择包含实例和 CPUUtilization 指标的行。

    3. 对于统计数据,选择 Average

    4. 选择时段 (例如 1 Hour)。

    5. 选择 Next

  5. 对于 Define Alarm 步骤,执行以下操作:

    1. Alarm Threshold 下,键入警报的唯一名称 (例如“Terminate EC2 instance”) 和警报的描述 (例如“Terminate EC2 instance when CPU is idle for too long”)。警报名称必须仅包含 ASCII 字符。

    2. Whenever 下,为 is 选择 < 并键入 10。对于 for,键入 24 作为连续时段数。

      Alarm Preview (警报预览) 下会显示阈值的图形表示。

    3. Notification 下,为 Send notification to 选择一个现有 SNS 主题或创建一个新 SNS 主题。

      要创建 SNS 主题,请选择 New list。对于 Send notification to,键入 SNS 主题的名称 (例如“Terminate_EC2_Instance”),并为 Email list 键入在警报状态变为 ALARM 时要将通知发送到的一系列电子邮件地址 (用逗号分隔)。将向每个电子邮件地址发送一封主题订阅确认电子邮件。您必须先确认订阅,然后才能将通知发送到电子邮件地址。

    4. 选择 EC2 Action

    5. EC2 Action 下,为 Whenever this alarm 选择 State is ALARM。对于 Take this action,选择 Terminate this instance

    6. 如果出现提示,请选择 Create IAM role: EC2ActionsAccess 以自动创建 IAM 角色,这样在此警报触发时 AWS 可自动代表您终止实例。

    7. 选择 Create Alarm

向 Amazon CloudWatch 警报添加重启操作

您可创建监控 Amazon EC2 实例并自动重启此实例的 Amazon CloudWatch 警报。在实例运行状况检查失败时,推荐重启警报操作 (与恢复警报操作相反,该操作适合系统运行状况检查失败的情况)。实例重启相当于操作系统重启。在许多情况下,只需要几分钟时间即可重启您的实例。重启实例时,其仍驻留在相同的物理主机上,因此您的实例将保留其公有 DNS 名称、私有 IP 地址及其实例存储卷上的任何数据。

重启实例不会启动新的实例计费时间,这与停止并重新启动您的实例不同。有关重启实例的更多信息,请参阅 Amazon EC2 用户指南(适用于 Linux 实例) 中的重启您的实例

重要

为了避免重启操作与恢复操作之间的竞争情况,请避免为重启警报和恢复警报设置相同的评估期。我们建议您将重启警报设置为 3 个 1 分钟的评估期。

使用 Amazon CloudWatch 控制台创建重启实例的警报

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

  2. 在导航窗格中,选择 Alarms

  3. 选择 Create Alarm

  4. 对于 Select Metric 步骤,执行以下操作:

    1. EC2 Metrics 下,选择 Per-Instance Metrics

    2. 选择包含实例和 StatusCheckFailed_Instance 指标的行。

    3. 对于统计数据,选择 Minimum

    4. 选择时段 (例如 1 Minute)。

    5. 选择 Next

  5. 对于 Define Alarm 步骤,执行以下操作:

    1. Alarm Threshold 下,键入警报的唯一名称 (例如“Reboot EC2 instance”) 和警报的描述 (例如“Reboot EC2 instance when health checks fail”)。警报名称必须仅包含 ASCII 字符。

    2. Whenever 下,为 is 选择 > 并键入 0。对于 for,键入 3 作为连续时段数。

      Alarm Preview (警报预览) 下会显示阈值的图形表示。

    3. Notification 下,为 Send notification to 选择一个现有 SNS 主题或创建一个新 SNS 主题。

      要创建 SNS 主题,请选择 New list。对于 Send notification to,键入 SNS 主题的名称 (例如“Reboot_EC2_Instance”),并为 Email list 键入在警报状态变为 ALARM 时要将通知发送到的一系列电子邮件地址 (用逗号分隔)。将向每个电子邮件地址发送一封主题订阅确认电子邮件。您必须先确认订阅,然后才能将通知发送到电子邮件地址。

    4. 选择 EC2 Action

    5. EC2 Action 下,为 Whenever this alarm 选择 State is ALARM。对于 Take this action,选择 Reboot this instance

    6. 如果出现提示,请选择 Create IAM role: EC2ActionsAccess 以自动创建 IAM 角色,这样在此警报触发时 AWS 可自动代表您停止实例。

    7. 选择 Create Alarm

向 Amazon CloudWatch 警报添加恢复操作

您可以创建 Amazon CloudWatch 警报用于监控 Amazon EC2 实例,并且在实例受损 (由于发生底层硬件故障或需要 AWS 参与才能修复的问题) 时自动恢复实例。无法恢复终止的实例。恢复的实例与原始实例相同,包括实例 ID、私有 IP 地址、弹性 IP 地址以及所有实例元数据。

StatusCheckFailed_System 警报触发且恢复操作启动时,您在创建警报及相关恢复操作时所选择的 Amazon SNS 主题将向您发出通知。在实例恢复过程中,实例将在重启时迁移,并且内存中的所有数据都将丢失。当该过程完成后,会向您已配置警报的 SNS 主题发布信息。任何订阅此 SNS 主题的用户都将收到一封电子邮件通知,其中包括恢复尝试的状态以及任何进一步的指示。您会注意到,实例在已恢复的实例上重启。

导致系统状态检查出现故障的问题示例包括:

  • 网络连接丢失

  • 系统电源损耗

  • 物理主机上的软件问题

  • 物理主机上的硬件问题

恢复操作仅受到以下项支持:

  • C3、C4、M3、M4、R3、R4、T2 和 X1 实例类型

  • VPC 中的实例

  • 使用共享租赁的实例 (租赁属性设置为 default)

  • 完全使用 Amazon EBS 存储的实例

如果您的实例有公有 IP 地址,它会在恢复后保留相同的公有 IP 地址。

重要

为了避免重启操作与恢复操作之间的竞争情况,请避免为重启警报和恢复警报设置相同的评估期。我们建议您将恢复警报设置为 2 个 1 分钟的评估期,并将重启警报设置为 3 个 1 分钟的评估期。

使用 Amazon CloudWatch 控制台创建恢复实例的警报

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

  2. 在导航窗格中,选择 Alarms

  3. 选择 Create Alarm

  4. 对于 Select Metric 步骤,执行以下操作:

    1. EC2 Metrics 下,选择 Per-Instance Metrics

    2. 选择包含实例和 StatusCheckFailed_System 指标的行。

    3. 对于统计数据,选择 Minimum

    4. 选择时段 (例如 1 Minute)。

      重要

      为了避免重启操作与恢复操作之间的竞争情况,请避免为重启警报和恢复警报设置相同的评估期。我们建议您将恢复警报设置为 2 个 1 分钟的评估期。

    5. 选择 Next

  5. 对于 Define Alarm 步骤,执行以下操作:

    1. Alarm Threshold 下,键入警报的唯一名称 (例如“Recover EC2 instance”) 和警报的描述 (例如“Recover EC2 instance when health checks fail”)。警报名称必须仅包含 ASCII 字符。

    2. Whenever 下,为 is 选择 > 并键入 0。对于 for,键入 2 作为连续时段数。

    3. Notification 下,为 Send notification to 选择一个现有 SNS 主题或创建一个新 SNS 主题。

      要创建 SNS 主题,请选择 New list。对于 Send notification to,键入 SNS 主题的名称 (例如“Recover_EC2_Instance”),并为 Email list 键入在警报状态变为 ALARM 时要将通知发送到的一系列电子邮件地址 (用逗号分隔)。将向每个电子邮件地址发送一封主题订阅确认电子邮件。您必须先确认订阅,然后才能将通知发送到电子邮件地址。

    4. 选择 EC2 Action

    5. EC2 Action 下,为 Whenever this alarm 选择 State is ALARM。对于 Take this action,选择 Recover this instance

    6. 选择 Create Alarm

查看已触发的警报和操作的历史记录

您可以在 Amazon CloudWatch 控制台中查看警报和操作历史记录。Amazon CloudWatch 会保留最近两周的警报和操作历史记录。

要查看已触发的警报和操作的历史记录

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

  2. 在导航窗格中,选择 Alarms

  3. 选择警报。

  4. 选择 Details 选项卡可查看最近的状态转换以及时间和指标值。

  5. 选择 History 选项卡可以查看最近的历史记录条目。