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

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

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

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

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

要设置可重启、停止或终止实例的 CloudWatch 警报操作,您必须使用服务相关 IAM 角色 AWSServiceRoleForCloudWatchEvents。AWSServiceRoleForCloudWatchEvents IAM 角色允许 AWS 代表您执行警报操作。

要为 CloudWatch Events 创建服务相关角色,请使用以下命令:

aws iam create-service-linked-role --aws-service-name events.amazonaws.com

控制台支持

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

权限

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

  • iam:CreateServiceLinkedRoleiam:GetPolicyiam:GetPolicyVersioniam:GetRole – 针对所有包含 Amazon EC2 操作的警报

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

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

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

  • 包含恢复操作的警报不需要任何特定权限

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

如果要使用 IAM 角色通过警报操作停止、终止或重启实例,您只能使用 AWSServiceRoleForCloudWatchEvents 角色。其他 IAM 角色不受支持。但是,您仍然可以查看警报状态和执行任何其他操作,如 Amazon SNS 通知或 Amazon EC2 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. 在导航窗格中,依次选择 AlarmsCreate Alarm

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

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

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

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

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

    5. 选择 Next

  4. 对于 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。对于发送通知到,请键入 SNS 主题的名称 (例如,Stop_EC2_Instance)。对于电子邮件列表,请键入在警报变为 ALARM 状态时将接收通知的电子邮件地址列表 (以逗号分隔)。将向每个电子邮件地址发送一封主题订阅确认电子邮件。您必须先确认订阅,然后才能将通知发送到电子邮件地址。

    4. 选择 EC2 Action

    5. 对于每当此警报,请选择状态为“警报”。对于 Take this action,选择 Stop this instance

    6. 选择 Create Alarm

向 Amazon CloudWatch 警报添加终止操作

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

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

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

  2. 在导航窗格中,依次选择 AlarmsCreate Alarm

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

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

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

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

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

    5. 选择 Next

  4. 对于 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。对于发送通知到,请键入 SNS 主题的名称 (例如,Terminate_EC2_Instance)。对于电子邮件列表,请键入在警报变为 ALARM 状态时接收通知的电子邮件地址列表 (以逗号分隔)。将向每个电子邮件地址发送一封主题订阅确认电子邮件。您必须先确认订阅,然后才能将通知发送到电子邮件地址。

    4. 选择 EC2 Action

    5. 对于每当此警报,请选择状态为“警报”。对于 Take this action,选择 Terminate this instance

    6. 选择 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. 在导航窗格中,依次选择 AlarmsCreate Alarm

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

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

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

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

    4. 选择一个时间段 (例如,1 分钟),然后选择下一步

  4. 对于 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。对于发送通知到,请键入 SNS 主题的名称 (例如,Reboot_EC2_Instance)。对于电子邮件列表,请键入在警报变为 ALARM 状态时接收通知的电子邮件地址列表 (以逗号分隔)。将向每个电子邮件地址发送一封主题订阅确认电子邮件。您必须先确认订阅,然后才能将通知发送到电子邮件地址。

    4. 选择 EC2 Action

    5. 对于每当此警报,请选择状态为“警报”。对于 Take this action,选择 Reboot this instance

    6. 选择 Create Alarm

向 Amazon CloudWatch 警报添加恢复操作

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

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

恢复操作仅适用于 StatusCheckFailed_System,而不能用于 StatusCheckFailed_Instance

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

  • 网络连接丢失

  • 系统电源损耗

  • 物理主机上的软件问题

  • 物理主机上影响到网络连接状态的硬件问题

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

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

  • VPC 中的实例

  • 具有 defaultdedicated 实例租赁的实例

  • 仅使用 Amazon EBS 卷的实例 (不配置实例存储卷)

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

重要

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

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

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

  2. 在导航窗格中,依次选择 AlarmsCreate Alarm

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

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

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

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

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

      重要

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

    5. 选择 Next

  4. 对于 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。对于发送通知到,请键入 SNS 主题的名称 (例如,Recover_EC2_Instance)。对于电子邮件列表,请键入在警报变为 ALARM 状态时接收通知的电子邮件地址列表 (以逗号分隔)。将向每个电子邮件地址发送一封主题订阅确认电子邮件。您必须先确认订阅,然后才能将通知发送到电子邮件地址。

    4. 选择 EC2 Action

    5. 对于每当此警报,请选择状态为“警报”。对于 Take this action,选择 Recover this instance

    6. 选择 Create Alarm

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

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

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

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

  2. 在导航窗格中,选择 Alarms (警报),然后选择一个警报。

  3. 要查看最近的状态转换以及时间和指标值,请选择详细信息

  4. 要查看最近的历史记录条目,请选择 History (历史记录)