实例的状态检查 - Amazon Elastic Compute Cloud

实例的状态检查

使用实例状态监控,您可以快速确定 Amazon EC2 是否已经检测到可能阻止您的实例运行应用程序的任何问题。Amazon EC2 会对每个运行的 EC2 实例执行自动检查以识别硬件和软件问题。您可以通过查看这些状态检查的结果来识别特定的和可检测的问题。事件状态数据扩充了 Amazon EC2 已提供的有关每个实例状态(如 pendingrunningstopping)的信息以及 Amazon CloudWatch 监控的利用率指标(CPU 利用率、网络流量和磁盘活动)。

状态检查每分钟进行一次,会返回一个通过或失败状态。如果所有的检查都通过,则实例的整体状态是OK。如果有一个或多个检查故障,则整体状态为受损。状态检查是内置到 Amazon EC2 中的,所以不能禁用或删除。

当状态检查失败时,状态检查的相应 CloudWatch 指标将增加。有关更多信息,请参阅状态检查指标。您可以使用这些指标创建基于状态检查结果触发的 CloudWatch 警报。例如,您可以创建一个警报来提醒您在一个指定实例上的状态检查中返回了故障状态。有关更多信息,请参阅创建和编辑状态检查警报

您也可以创建 Amazon CloudWatch 警报,用于监控 Amazon EC2 实例并在实例由于潜在问题而受损时自动恢复实例。有关更多信息,请参阅恢复实例

状态检查类型

状态检查有三种类型。

系统状态检查

系统状态检查监控您的实例在其上运行的 AWS 系统。这些检查会检测出需要 AWS 参与修复的深层实例问题。如果系统状态检查失败,您可以选择等待 AWS 修复问题,也可以自行解决问题。对于由 Amazon EBS 支持的实例,您也可自行停止和启动实例,在大多数情况下,这会导致实例被迁移至新的主机。对于由实例存储支持的 Linux 实例,您可以终止并替换实例。对于 Windows 实例,根卷必须是 Amazon EBS 卷;根卷不支持实例存储。请注意,实例存储卷是临时的,实例停止后所有数据都会丢失。

以下是可能导致系统状态检查失败的问题的示例:

  • 网络连接丢失

  • 系统电源损耗

  • 物理主机上的软件问题

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

如果未通过系统状态检查,我们会微增 StatusCheckFailed_System 指标。

裸机实例

如果在裸机实例上从操作系统重新启动,系统状态检查可能会暂时返回失败状态。当实例变为可用时,系统状态检查应返回通过状态。

实例状态检查

实例状态检查 监控各个实例的软件和网络配置。Amazon EC2 通过向网络接口 (NIC) 发送地址解析协议 (ARP) 请求,检查实例的运行状况。这些检查检测需要您参与修复的问题。如果实例状态检查失败,通常必须由您自行解决问题(例如,重启实例或更改实例配置)。

以下是可能导致实例状态检查失败的问题的示例:

  • 系统状态检查故障

  • 网络或启动配置不正确

  • 内存耗尽

  • 文件系统损坏

  • 内核不兼容

如果未通过实例状态检查,我们会微增 StatusCheckFailed_Instance 指标。

裸机实例

如果在裸机实例上从操作系统重新启动,实例状态检查可能会暂时返回失败状态。当实例变为可用时,实例状态检查应返回通过状态。

附加的 EBS 状态检查

附加的 EBS 状态检查可监控附加到实例的 Amazon EBS 卷是否可以访问并能够完成 I/O 操作。如果附加到实例的一个或多个 EBS 卷无法完成 I/O 操作,StatusCheckFailed_AttachedEBS 指标是表示受损的二进制值。这些状态检查可检测计算或 Amazon EBS 基础设施的底层问题。当附加的 EBS 状态检查指标失败时,您可以等待 AWS 解决问题,也可以自行采取措施,例如更换受影响的卷或停止并重启实例。

以下是可能导致附加的 EBS 状态检查失败的问题的示例:

  • EBS 卷底层的存储子系统的硬件或软件问题

  • 物理主机上影响到 EBS 卷的可访问性的硬件问题

  • 实例和 EBS 卷之间的连接问题

您可以使用 StatusCheckFailed_AttachedEBS 指标来帮助提高工作负载的弹性。您可以使用此指标创建基于状态检查结果触发的 Amazon CloudWatch 告警。例如,当您检测到长时间影响时,可以故障转移到辅助实例或可用区。或者,您可以使用 EBS CloudWatch 指标监控每个附加的卷的 I/O 性能,以检测和替换受损的卷。如果您的工作负载不会驱动附加到您的实例的任何 EBS 卷的 I/O,并且附加的 EBS 状态检查表明存在受损,则可以停止并启动该实例,以解决影响 EBS 卷的可访问性的物理主机问题。有关更多信息,请参阅 Amazon EBS 的 Amazon CloudWatch 指标

注意
  • 附加的 EBS 状态检查指标仅适用于 Nitro 实例。

  • 您可以根据 StatusCheckFailed_AttachedEBS 指标创建 CloudWatch 告警,从而监控附加的 EBS 卷状态检查指标。您可以使用 describe-instance-status AWS CLI 命令查看此状态检查。

处理状态检查

您可以使用控制台和命令行工具(例如 AWS CLI)处理状态检查。

查看状态检查

要查看状态检查,请使用以下方法之一。

Console
查看状态检查,需要进行以下操作
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在导航窗格中,选择实例

  3. 实例页面上的状态检查列中会列出每个实例的运行状态。

  4. 要查看特定实例的状态,请选择该实例,然后选择状态和警报选项卡。

    
                                            在“状态和警报”选项卡上查看实例状态检查。

    如果实例状态检查失败,通常必须由您自行解决问题(例如,通过重启实例或更改实例配置)。要自行解决系统或实例状态检查失败问题,请参阅 通过故障状态检查来排查实例问题

  5. 要查看 CloudWatch 指标以进行状态检查,请在状态和警报选项卡上,展开指标以查看以下指标的图表:

    • 系统状态检查失败

    • 实例状态检查失败

    有关更多信息,请参阅 状态检查指标

Command line

您可以使用 describe-instance-status (AWS CLI) 命令查看正在运行的实例的状态检查。

要查看所有实例的状态,请使用以下命令。

aws ec2 describe-instance-status

要获取实例状态为 impaired 的所有实例的状态,请使用以下命令。

aws ec2 describe-instance-status \ --filters Name=instance-status.status,Values=impaired

要获取单一实例的状态,请使用以下命令。

aws ec2 describe-instance-status \ --instance-ids i-1234567890abcdef0

或者,使用以下 命令:

如果您的实例发生了状态检查故障,请参阅 通过故障状态检查来排查实例问题

创建和编辑状态检查警报

您可以使用状态检查指标创建 CloudWatch 警报,以在实例的状态检查失败时向您发送通知。

要创建状态检查告警,请使用以下方法之一:

Console

使用以下过程配置一个警报,当实例的状态检查失败时,该警报将通过电子邮件向您发送通知,或者停止、终止或恢复实例。

创建状态检查警报
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在导航窗格中,选择实例

  3. 选择实例,选择状态检查选项卡,然后依次选择操作创建状态检查警报

  4. Manage CloudWatch alarms(管理 CloudWatch 警报)页面的 Add or edit alarm(添加或编辑警报)下,选择 Create an alarm(创建警报)。

  5. 对于警报通知,打开开关以配置 Amazon Simple Notification Service (Amazon SNS) 通知。选择现有 Amazon SNS 主题或输入名称来创建新主题。

    如果您向收件人列表添加了电子邮件地址或创建了新的主题,则 Amazon SNS 将向每个新地址发送一封订阅确认电子邮件。每个收件人必须通过选择该邮件中包含的链接来确认订阅。警报通知仅发送至经过确认的地址。

  6. 对于警报操作,打开开关以指定触发警报时要执行的操作。选择操作。

  7. 对于警报阈值,请指定警报的指标和条件。

    您可以保留 Group samples by(样本分组方式)和 Type of data to sample(要采样的数据类型)的原定设置 [Average(平均值)和 Status check failed:either(状态检查失败:任一)],也可以根据自己的需求进行更改。

    Consecutive period(连续周期)中,设置要评估的周期数,然后在 Period(时间段)中输入评估时间段的持续时间,此评估时间段结束后才会触发警报并发送电子邮件。

  8. (可选)对于样本指标数据,选择添加到控制面板

  9. 选择创建

在您需要更改实例状态警报时,您可以对其进行编辑。

编辑状态检查警报
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在导航窗格中,选择实例

  3. 选择所需实例,然后依次选择操作监控管理 CloudWatch 警报

  4. Manage CloudWatch alarms(管理 CloudWatch 警报)页面的 Add or edit alarm(添加或编辑警报)下,选择 Edit an alarm(编辑警报)。

  5. 对于 Search for alarm(搜索警报),选择警报。

  6. 完成更改后,选择 Update(更新)。

Command line

在以下示例中,当实例的实例检查或系统状态检查在至少两个期间连续失败后,警报将向 SNS 主题 arn:aws:sns:us-west-2:111122223333:my-sns-topic 发送通知。使用的 CloudWatch 指标为 StatusCheckFailed

使用 AWS CLI 创建状态检查警报
  1. 选择一个现有 SNS 主题或创建一个新的主题。有关更多信息,请参阅 AWS Command Line Interface 用户指南中的在您的 Amazon SNS 中使用 AWS CLI

  2. 使用以下 list-metrics 命令查看 Amazon EC2 的可用 Amazon CloudWatch 指标。

    aws cloudwatch list-metrics --namespace AWS/EC2
  3. 使用以下 put-metric-alarm 命令创建警报。

    aws cloudwatch put-metric-alarm \ --alarm-name StatusCheckFailed-Alarm-for-i-1234567890abcdef0 \ --metric-name StatusCheckFailed \ --namespace AWS/EC2 \ --statistic Maximum \ --dimensions Name=InstanceId,Value=i-1234567890abcdef0 \ --unit Count \ --period 300 \ --evaluation-periods 2 \ --threshold 1 \ --comparison-operator GreaterThanOrEqualToThreshold \ --alarm-actions arn:aws:sns:us-west-2:111122223333:my-sns-topic

    周期为收集 Amazon CloudWatch 指标所需的时间范围(以秒为单位)。此示例使用 300,这是 60 秒乘以 5 分钟得到的结果。评估期是必须将指标数值与阈值相比较的连续周期数。此示例使用 2。警报操作是要在此警报触发时执行的操作。此示例将此警报配置为使用 Amazon SNS 发送电子邮件。