监控和规划主机维护事件


每个虚拟机 (VM) 实例或裸机实例都使用主机维护政策来确定实例在维护操作期间的行为。某些实例提供了提前查看维护时间表的其他选项。

本页介绍了如何监控和规划 Compute Engine 实例上的主机维护事件

准备工作

  • 如果您尚未设置身份验证,请进行设置。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以选择以下任一选项向 Compute Engine 进行身份验证:

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. REST

      如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭据。

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证

所需的角色

如需获得创建实例和管理实例维护所需的权限,请让管理员向您授予项目的以下 IAM 角色:

如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

这些预定义角色包含创建实例和管理实例维护所需的权限。如需查看所需的确切权限,请展开所需权限部分:

所需权限

如需创建实例和管理实例维护,需要具备以下权限:

  • 如需获取实例的相关信息(包括元数据),请执行以下操作: compute.instances.get

您也可以使用自定义角色或其他预定义角色来获取这些权限。

限制

只有当实例使用下列其中一个机器系列中的机器类型时,您才能查看实例即将进行的维护事件的通知:

  • 加速器优化机器系列

  • 通用机器系列

  • 内存优化机器系列

  • 存储优化机器系列

维护通知概览

Google 会通过多种方法针对即将进行的主机维护发送通知。当维护窗口打开时,Google Cloud 会自动对您的实例执行维护。通过监控实例的即将到来的维护窗口,您可以主动准备工作负载以处理即将进行的维护,同时将中断降至最低。

支持维护事件通知的计算实例具有以下特征:

  • 维护事件较少:通常,具有周期性维护间隔的实例的维护事件应该较少。
  • 维护通知较长:提前收到维护事件通知,以便进行规划。
  • 监控和规划:使用 Cloud Logging 跟踪维护时间表。使用突发事件和提醒随时了解最新动态。
  • 按需维护控制:在通知期内开始维护,以便在维护符合时间表时更新实例。

即将发生的通知事件的相关信息的呈现方式如下所示:

upcomingMaintenance:{
    "canReschedule":True
    "latestWindowStartTime": "2024-12-01T19:00:01Z"
    "maintenanceStatus":"PENDING"
    "type":"SCHEDULED"
    "windowEndTime": "2024-12-01T22:00:00Z"
    "windowStartTime": "2024-12-01T19:00:00Z"
}

如果没有即将进行的维护事件,您会看到类似如下的消息:

{ "error": "no notifications have been received yet, try again later" }

维护状态定义

以下状态定义说明了对实例主机维护查询的响应。这些定义提供了与维护事件相关的信息。Google Cloud CLI、REST 和元数据服务器使用以下相同的响应:

  • canReschedule:是否可以在通知期内手动启动维护。
    • TRUE:可以在通知期内执行客户触发的维护。
    • FALSE:无法对此实例执行客户触发的维护。 这通常在实例进行维护期间发生,或者如果实例类型不支持按需维护。
  • latestWindowStartTime:维护窗口可移至的最晚时间。
  • maintenanceStatus:维护事件的当前状态。
    • ONGOING:维护操作正在进行中。
    • PENDING:维护操作已安排,但尚未开始。
  • type:要执行的维护类型。
    • NONE:此实例未安排维护。
    • SCHEDULED:对于中断性维护,Compute Engine 会至少提前 7 天通知大多数实例;X4 实例会提前大约 60 天收到通知。
    • UNSCHEDULED:由于此类维护代表重大更新,因此 Compute Engine 会尽可能提前通知,但通常比安排的维护事件提前通知的时间要短得多。
  • windowEndTime:发生维护的时段的结束时间。
  • windowStartTime:发生维护的时段的开始时间。

维护状态行为

管理维护事件时,请检查 canReschedulemaintenanceStatus 的值。这些字段组合起来,表示您可以或不可以执行哪些与重新安排维护事件相关的操作:

  • canReschedule=TruemaintenanceStatus=Pending - 您可以在预定的开始时间之前手动为实例启动维护事件。
  • canReschedule=FalsemaintenanceStatus=Ongoing - 维护正在进行中,无法重新安排。
  • canReschedule=FalsemaintenanceStatus=Pending - 您的实例不支持手动触发的维护事件。

查看维护通知

您可以通过查询计算实例、元数据服务器或使用 Cloud Logging 来查找维护通知。

检查实例是否存在维护事件通知

使用 Google Cloud CLI、REST 或查询元数据服务器,了解您的实例是否有即将发生的主机维护事件。

gcloud

如需查看实例以后的维护窗口,请使用 gcloud compute instances describe 命令

gcloud compute instances describe INSTANCE_NAME \
   --zone=ZONE_NAME --format="yaml(upcomingMaintenance)"

替换以下内容:

  • INSTANCE_NAME:计算实例的名称。
  • ZONE_NAME:实例所在的可用区。

如果有即将发生的维护活动,则响应中会包含类似以下内容的部分:

  upcomingMaintenance:{
    "canReschedule":True
    "latestWindowStartTime": "2024-12-01T19:00:01Z"
    "maintenanceStatus":"PENDING"
    "type":"SCHEDULED"
    "windowEndTime": "2024-12-01T22:00:00Z"
    "windowStartTime": "2024-12-01T19:00:00Z"
  }

在此响应中:

  • 系统会按 windowStartTime 中显示的日期和时间安排维护。
  • canReschedule 设置为 TruemaintenanceStatus 设置为 PENDING。这些设置表明您可以在 latestWindowStartTime 中显示的日期之前手动启动预定的维护活动。

REST

如需查看实例是否即将进行维护,请使用 instances.get 方法构建 GET 请求:

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/zones/ZONE/instances/INSTANCE_NAME

替换以下内容:

  • PROJECT_NAME:包含计算实例的项目的名称。
  • ZONE:实例所在的地区。
  • INSTANCE_NAME:实例的名称。

如果有即将发生的维护活动,则响应中会包含类似以下内容的部分:

  upcomingMaintenance:{
    "canReschedule":True
    "latestWindowStartTime": "2023-12-01T19:00:01Z"
    "maintenanceStatus":"PENDING"
    "type":"SCHEDULED"
    "windowEndTime": "2023-12-01T22:00:00Z"
    "windowStartTime": "2023-12-01T19:00:00Z"
  }

在此响应中:

  • 系统会按 windowStartTime 中显示的日期和时间安排维护。
  • canReschedule 设置为 TruemaintenanceStatus 设置为 PENDING。这些设置表明您可以在 latestWindowStartTime 中显示的日期之前手动启动预定的维护活动。

元数据服务器

在客机操作系统中,查询元数据服务器以查看下一个维护事件。

$ curl http://metadata.google.internal/computeMetadata/v1/instance/upcoming-maintenance?alt=json -H "Metadata-Flavor: Google"

检查 Cloud Logging 是否存在维护事件通知

Compute Engine 会在Cloud Audit Logs 中为实例创建系统事件,以记录维护事件。您可以使用 Cloud LoggingLogs Explorer 在维护事件之前、期间和之后查看这些事件。

控制台

如需查询审核日志以获取实例的维护通知,请完成以下步骤:

  1. 转到虚拟机实例页面。

    转到虚拟机实例

  2. 点击您要查看其维护通知的实例的名称

    实例详情页面会打开。

  3. 日志部分,点击标记为日志记录的链接。

    系统随即会打开 Logs Explorer 查询编辑器页面。在查询窗格中,系统已为您的实例填充 resource.type 和实例 ID。

  4. 查询窗格中,将以下代码行添加到查询中:

    operation.producer="compute.instances.upcomingMaintenance" OR
    "compute.instances.terminateOnHostMaintenance" OR
    "compute.instances.migrateOnHostMaintenance"
    
  5. 点击运行查询。查询结果窗格中会显示匹配的维护通知事件。

    在查询结果窗格中,您可以点击修改时间以扩大搜索时间范围,或将结果范围缩小到特定日期或时间。

  6. 点击日志条目可查看维护通知详情。

    1. 对于即将进行的维护通知,请展开标题 metadata 以查看当前状态、类型以及安排的维护窗口的开始时间和结束时间等信息。
    2. 展开标题 status 以查看通知的描述性消息。

维护通知示例

日志浏览器中会显示实例的维护事件通知,其中的值类似于以下内容:

  • methodName"compute.instances.upcomingMaintenance"
  • metadata
    • maintenanceStatus"PENDING"
    • windowStartTime"2024-07-23T20:00:00Z"

维护事件开始后,日志中会显示一条新的信息型事件,其值与以下内容类似:

  • methodName"compute.instances.upcomingMaintenance"
  • metadata
    • maintenanceStatus"ONGOING"
    • windowStartTime"2024-07-23T20:00:00Z"

在维护事件期间,系统会根据实例的主机维护政策配置,将以下某个系统事件记录到审核日志中:

  • 对于配置为在维护事件期间使用实时迁移的实例,系统会发出一个包含 methodName: "compute.instances.migrateOnHostMaintenance" 的事件。
  • 对于配置为在维护事件期间终止的实例,系统会发出一个 methodName: "compute.instances.terminateOnHostMaintenance" 系统事件。

维护事件结束后,审核日志中会显示一条新的信息型事件,其值与以下内容类似:

  • methodName"compute.instances.upcomingMaintenance"
  • status: { message: "Maintenance window has completed for this instance. All maintenance notifications on the instance have been removed." }

为主机维护通知配置提醒

您可以设置基于日志的提醒政策,以搜索特定的维护通知事件,并使用通知渠道发送提醒。

控制台

如需为实例的维护事件创建提醒,请完成以下步骤:

  1. 转到虚拟机实例页面。

    转到虚拟机实例

  2. 点击您要为其创建维护事件提醒的实例的名称

    实例详情页面会打开。

  3. 日志部分,点击标记为日志记录的链接。

    系统随即会打开 Logs Explorer 查询编辑器页面。在查询窗格中,系统已为您的实例填充 resource.type 和实例 ID。

  4. 查询窗格中,将以下代码行添加到查询中:

    operation.producer="compute.instances.upcomingMaintenance"
    
  5. 点击运行查询。查询结果窗格中会显示匹配的维护通知事件。

  6. 在“查询结果”窗格中,点击修改时间

    1. 在编辑窗口的左侧,相对时间字段中输入 1d,即可查看过去一周的日志条目。
    2. 点击应用
  7. 查询结果窗格的标题中,点击 创建提醒。如果您的查看窗口较小,操作菜单上可能会显示创建提醒选项。

  8. 创建基于日志的提醒政策窗格中的提醒详情部分,执行以下操作:

    1. 为提醒政策输入名称,例如 Upcoming maintenance for my-c3d-vm@us-central1-b
    2. 政策严重性级别菜单中,选择无严重性

    3. 文档字段中,您可以输入提醒政策的说明。您也可以添加有助于通知接收人诊断问题的信息。 以下字符串总结了发出通知的原因:

      Log-based alerting policy in project ${project} to monitor upcoming
      maintenance notifications. See also "Host maintenance alerts" and
      "onHostMaintenance actions" alerting policies.
      

      如需详细了解如何设置此字段格式并定制其内容,请参阅在文档模板中使用 Markdown 和变量

    4. 要前进到下一步,请点击下一步

  9. 选择要包含在提醒中的日志部分中,点击预览日志以检查查询和结果。

    您在查询窗格中构建的查询也会显示在此窗格中。我们建议先在日志浏览器的查询窗格中构建查询。

    如有必要,您可以在此窗格中修改查询。如果您修改了查询,请点击预览日志来检查结果。

  10. 点击下一步

  11. 设置通知频率和自动关闭时长窗格中,执行以下操作:

    1. 选择通知之间的最短时间间隔。如果此条件多次满足,您可以使用此值来控制从“监控”收到的通知数量。对于此示例,请从选项中选择 1 天

    2. 对于突发事件自动关闭持续时间,请使用 7 天的上限值。

    3. 点击下一步

  12. 如果您已配置电子邮件通知渠道,则可以从列表中选择它。如果没有,请点击管理通知渠道并添加电子邮件渠道。如需了解如何创建通知渠道,请参阅创建和管理通知渠道

  13. 点击保存

    您现在可以按照测试基于日志的示例提醒政策中所述的步骤测试基于日志的提醒政策了

如需了解详情,请参阅配置基于日志的提醒以及创建和管理通知渠道

后续步骤