每个虚拟机 (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
-
安装 Google Cloud CLI。 安装完成后,运行以下命令来初始化 Google Cloud CLI:
gcloud init
如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI。
- Set a default region and zone.
REST
如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭证。
安装 Google Cloud CLI。 安装完成后,运行以下命令来初始化 Google Cloud CLI:
gcloud init
如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI。
如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证。
所需的角色
如需获得创建实例和管理实例维护所需的权限,请让管理员向您授予项目的以下 IAM 角色:
-
Compute Instance Admin (v1) (
roles/compute.instanceAdmin.v1
) -
如需对系统事件审核日志拥有只读权限,请使用以下角色:
Logs Viewer (
roles/logging.viewer
)
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
这些预定义角色已包含创建实例和管理实例维护所需的权限。如需查看所需的确切权限,请展开所需权限部分:
所需权限
创建实例和管理实例维护所需的权限如下:
-
如需获取实例的相关信息(包括元数据),请使用以下命令:
compute.instances.get
限制
仅当实例使用以下某个机器系列的机器类型时,您才能查看该实例即将进行的维护事件通知:
维护通知概览
Google 会通过多种方式发送有关即将进行的主机维护的通知。当维护窗口打开时, Google Cloud 会自动对实例执行维护。通过监控实例即将进行的维护窗口,您可以主动准备工作负载以处理即将进行的维护,同时将中断降至最低。
这些支持维护事件通知的计算实例具有以下特征:
- 维护事件较少:通常,具有周期性维护间隔的实例的维护事件应该较少。
- 维护通知较长:提前收到维护事件通知,以便进行规划。
- 监控和规划:使用 Cloud Logging 跟踪维护时间表。使用突发事件和提醒随时了解最新动态。
- 按需维护控制:在通知期内开始维护,以便在合适时间更新实例。
有关即将发生的通知事件的信息以类似于以下方式显示:
upcomingMaintenance:{ "canReschedule":True "latestWindowStartTime": "2024-12-01T19:00:01Z" "machineType":"x4-megamem-960-metal" "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:维护窗口可移至的最晚时间。
- machineType:实例的机器类型,例如
x4-megamem-960-metal
或c4-highmem-192
。 - maintenanceStatus:维护事件的当前状态。
ONGOING
:维护操作正在进行中。PENDING
:维护操作已安排,但尚未开始。
- type:要执行的维护类型。
NONE
:未安排对此实例进行维护。SCHEDULED
:对于中断性维护,Compute Engine 会提前至少 7 天向大多数实例发出通知;X4 实例会提前大约 60 天收到通知。UNSCHEDULED
:由于维护代表关键更新,因此 Compute Engine 会尽可能提前通知,但通常比计划维护事件提前通知的时间要短得多。
- windowEndTime:发生维护的时段的结束时间。
- windowStartTime:发生维护的时段的开始时间。
维护状态行为
管理维护事件时,请检查
canReschedule
和maintenanceStatus
的值。这些字段结合起来可指示您是否可以执行某些操作来重新安排维护事件:canReschedule=True
和maintenanceStatus=Pending
- 您可以在预定开始时间之前手动为实例启动维护事件。canReschedule=False
和maintenanceStatus=Ongoing
- 维护工作正在进行中,无法重新安排。canReschedule=False
和maintenanceStatus=Pending
- 您的实例不支持手动触发的维护事件。
查看维护通知
您可以通过查询计算实例、元数据服务器或使用 Cloud Logging 来查找维护通知。
检查实例是否有维护事件通知
使用 Google Cloud CLI、REST 或查询元数据服务器,查看您的实例是否有即将发生的主机维护事件。
gcloud
如需查看某个实例的即将到来的维护窗口,请使用
gcloud compute instances describe
命令。gcloud compute instances describe INSTANCE_NAME \ --zone=ZONE_NAME --format="yaml(resourceStatus.upcomingMaintenance)"
替换以下内容:
INSTANCE_NAME
:计算实例的名称。ZONE_NAME
:实例所在的可用区。
如果即将发生维护事件,响应中将包含类似以下内容的部分:
resourceStatus: upcomingMaintenance: canReschedule: true latestWindowStartTime: '2025-01-15T12:00:01Z' machineType: x4-megamem-960-metal maintenanceStatus: PENDING type: SCHEDULED windowEndTime: '2025-01-15T16:00:00Z' windowStartTime: '2025-01-15T12:00:00Z'
在此响应中:
- 系统会按
windowStartTime
中显示的日期和时间安排维护。 canReschedule
设置为true
,maintenanceStatus
设置为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" "machineType": "x4-megamem-960-metal" "maintenanceStatus":"PENDING" "type":"SCHEDULED" "windowEndTime": "2023-12-01T22:00:00Z" "windowStartTime": "2023-12-01T19:00:00Z" }
在此响应中:
- 系统会按
windowStartTime
中显示的日期和时间安排维护。 canReschedule
设置为True
,maintenanceStatus
设置为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 Logging 和 Logs Explorer 在维护事件发生前、发生期间和发生后查看这些事件。
控制台
如需查询实例的维护通知的审核日志,请完成以下步骤:
转到虚拟机实例页面。
点击要查看维护通知的实例的名称。
实例详情页面会打开。
在日志部分中,点击标有日志记录的链接。
系统随即会打开 Logs Explorer 查询编辑器页面。在查询窗格中,系统会自动填入该实例的
resource.type
和实例 ID。在查询窗格中,将以下代码行添加到查询中:
operation.producer="compute.instances.upcomingMaintenance" OR "compute.instances.terminateOnHostMaintenance" OR "compute.instances.migrateOnHostMaintenance"
点击运行查询。匹配的维护通知事件会显示在查询结果窗格中。
在查询结果窗格中,您可以点击修改时间以扩大搜索时间范围,或将结果限定在特定的日期或时间范围内。
点击日志条目可查看维护通知的详细信息。
- 对于即将到来的维护通知,展开
metadata
标题即可查看当前状态、类型及计划的维护窗口起止时间等信息。 - 展开标题
status
以查看通知的说明性消息。
- 对于即将到来的维护通知,展开
维护通知示例
Logs Explorer 中会显示实例的维护事件通知,其中的值类似于以下内容:
methodName
:"compute.instances.upcomingMaintenance"
metadata
:maintenanceStatus
:"PENDING"
machineType
:"x4-megamem-960-metal"
windowStartTime
:"2024-07-23T20:00:00Z"
当维护事件开始时,日志中会显示一项新的信息事件,其中的值类似于以下内容:
methodName
:"compute.instances.upcomingMaintenance"
metadata
:maintenanceStatus
:"ONGOING"
machineType
:"x4-megamem-960-metal"
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."
}
为主机维护通知配置提醒
您可以设置基于日志的提醒政策,以搜索特定的维护通知事件,并使用通知渠道发送提醒。
控制台
如需为实例的维护事件创建提醒,请完成以下步骤:
转到虚拟机实例页面。
点击要为其创建维护事件提醒的实例的名称。
实例详情页面会打开。
在日志部分中,点击标有日志记录的链接。
系统随即会打开 Logs Explorer 查询编辑器页面。在查询窗格中,系统会自动填入该实例的
resource.type
和实例 ID。在查询窗格中,将以下代码行添加到查询中:
operation.producer="compute.instances.upcomingMaintenance"
如需过滤机器类型(而非特定实例)的主机维护事件,请按以下方式修改查询:
- 移除指定实例 ID 的行。
将以下行添加到查询:
protoPayload.metadata.machineType:"MACHINE_TYPE"
将
MACHINE_TYPE
替换为您要过滤主机维护事件的机器类型。
点击运行查询。匹配的维护通知事件会显示在查询结果窗格中。
在查询结果窗格中,点击修改时间。
- 在修改窗口左侧的相对时间字段中输入
1d
,以查看过去一周的日志条目。 - 点击应用。
- 在修改窗口左侧的相对时间字段中输入
在查询结果窗格的标题中,点击add_alert 创建提醒。如果您的查看窗口较窄,操作菜单上可能会显示创建提醒选项。
在创建基于日志的提醒政策窗格的提醒详情部分中,执行以下操作:
- 为提醒政策输入名称,例如
Upcoming maintenance for my-c3d-vm@us-central1-b
。 从政策严重级别菜单中,选择无严重级别。
在文档字段中,您可以为提醒政策输入说明。您也可以添加有助于通知接收人诊断问题的信息。 以下字符串总结了发出通知的原因:
Log-based alerting policy in project ${project} to monitor upcoming maintenance notifications. See also "Host maintenance alerts" and "onHostMaintenance actions" alerting policies.
如需详细了解如何设置此字段格式并定制其内容,请参阅在文档模板中使用 Markdown 和变量。
要前进到下一步,请点击下一步。
- 为提醒政策输入名称,例如
在选择要包含在提醒中的日志部分中,点击预览日志以检查查询和结果。
您在查询窗格中构建的查询也会显示在此窗格中。我们建议首先在 Logs Explorer 的查询窗格中构建查询。
如有必要,您可以在此窗格中修改查询。如果您修改了查询,请点击预览日志来检查结果。
点击下一步。
在设置通知频率和自动关闭时长窗格中,执行以下操作:
选择通知之间的最短时间间隔。如果该条件被多次触发,您可以使用此值控制从监控系统接收的通知次数。对于此示例,请从选项中选择 1 天。
对于事件自动关闭时长,请使用 7 天的最大值。
点击下一步。
如果您已配置电子邮件通知渠道,则可以从列表中选择它。如未配置,请点击管理通知渠道并添加电子邮件渠道。如需了解如何创建通知渠道,请参阅创建和管理通知渠道。
点击保存。
您现在可以测试基于日志的提醒政策,如测试基于日志的示例提醒政策中所述
如需了解详情,请参阅配置基于日志的提醒以及创建和管理通知渠道。
后续步骤
如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2025-08-29。
-