You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过编程判断GCP实例在指定时段的扩缩容及vCPU变更

如何编程检测GCP计算实例的扩缩容及MIG实例vCPU变更

一、检测指定时间段内的实例扩缩容

不管实例属于GKE集群、托管实例组(MIG)还是独立实例,核心是通过Cloud Audit Logs或Compute Engine操作日志追踪实例生命周期事件,或组的resize操作:

1. 通用检测方案(适用所有实例类型)

通过Cloud Audit Logs过滤实例创建/销毁事件,指定时间范围即可统计扩缩容情况:

  • 目标事件:google.compute.instances.create(实例创建)、google.compute.instances.delete(实例销毁)
  • 用对应语言的Cloud Logging客户端库实现,以Python为例:
from google.cloud import logging_v2
import datetime

client = logging_v2.LoggingServiceV2Client()
project_id = "你的项目ID"
# 定义时间范围(示例:过去30天)
start_time = datetime.datetime.now() - datetime.timedelta(days=30)
end_time = datetime.datetime.now()

# 构建日志查询语句
query = (
    f'resource.type="gce_instance" '
    f'AND (protoPayload.methodName="google.compute.instances.create" OR protoPayload.methodName="google.compute.instances.delete") '
    f'AND timestamp>="{start_time.isoformat()}Z" AND timestamp<="{end_time.isoformat()}Z"'
)

# 执行日志查询
results = client.list_log_entries(resource_names=[f"projects/{project_id}"], filter_=query)

# 统计扩缩容数量
create_count = 0
delete_count = 0
for entry in results:
    if entry.proto_payload.method_name == "google.compute.instances.create":
        create_count += 1
    else:
        delete_count += 1

print(f"过去30天:创建实例{create_count}台,销毁实例{delete_count}台")
  • 若要区分实例所属组(如MIG/GKE节点池),可从日志条目protoPayload.resourceName或labels字段提取关联的MID/节点池ID。

2. MIG专属扩缩容检测

MIG的扩缩容会触发专属google.compute.instanceGroupManagers.resize事件,直接过滤该事件即可获取精准的resize记录:

  • 日志查询语句调整为:
    resource.type="gce_instance_group_manager" AND protoPayload.methodName="google.compute.instanceGroupManagers.resize" AND timestamp>="[起始时间]Z" AND timestamp<="[结束时间]Z"
    
  • 日志条目中会包含MIG名称、目标实例数量、操作时间等关键信息。

3. GKE节点池扩缩容检测

GKE节点池的扩缩容对应container.nodePools.resize事件,日志查询语句:

resource.type="gke_node_pool" AND protoPayload.methodName="container.nodePools.resize" AND timestamp>="[起始时间]Z" AND timestamp<="[结束时间]Z"

二、检测MIG实例vCPU增加2核的变更

vCPU数量由实例的机器类型决定(如n1-standard-2对应2核,n1-standard-4对应4核),因此核心是追踪机器类型的变更:

1. 通过Cloud Audit Logs追踪机器类型变更

过滤google.compute.instances.setMachineType事件,该事件会记录实例从旧机器类型切换到新机器类型的操作:

from google.cloud import logging_v2, compute_v1
import datetime

client = logging_v2.LoggingServiceV2Client()
compute_client = compute_v1.MachineTypesClient()
project_id = "你的项目ID"
start_time = datetime.datetime.now() - datetime.timedelta(days=30)
end_time = datetime.datetime.now()

query = (
    f'resource.type="gce_instance" '
    f'AND protoPayload.methodName="google.compute.instances.setMachineType" '
    f'AND timestamp>="{start_time.isoformat()}Z" AND timestamp<="{end_time.isoformat()}Z"'
)

results = client.list_log_entries(resource_names=[f"projects/{project_id}"], filter_=query)

# 解析vCPU变化
def get_vcpus(machine_type, zone):
    mt = compute_client.get(project=project_id, zone=zone, machine_type=machine_type)
    return mt.guest_cpus

for entry in results:
    zone = entry.resource.labels.zone
    old_mt = entry.proto_payload.request.machineType.split("/")[-1]
    new_mt = entry.proto_payload.response.machineType.split("/")[-1]
    
    old_vcpus = get_vcpus(old_mt, zone)
    new_vcpus = get_vcpus(new_mt, zone)
    
    if new_vcpus - old_vcpus == 2:
        print(f"实例{entry.resource.labels.instance_id}的vCPU从{old_vcpus}核增加到{new_vcpus}核")

2. 检测MIG实例模板更新

如果MIG通过更新实例模板批量修改机器类型,会触发google.compute.instanceGroupManagers.updateInstanceTemplate或google.compute.instanceTemplates.update事件。通过这些日志可追踪模板的机器类型变更,再结合MIG滚动更新记录,确认实例是否批量应用了新配置。

3. 批量对比实例当前与历史配置

若未开启审计日志(不推荐),可定期抓取MIG下所有实例的机器类型,与之前存储的快照对比:

from google.cloud import compute_v1

client = compute_v1.InstanceGroupManagersClient()
instance_client = compute_v1.InstancesClient()
project_id = "你的项目ID"
mig_name = "你的MIG名称"
zone = "你的可用区"

# 获取MIG下所有实例
mig = client.get(project=project_id, zone=zone, instance_group_manager=mig_name)
instance_urls = mig.instance_group.instances

# 逐个获取实例vCPU并对比历史快照
for instance_url in instance_urls:
    instance_id = instance_url.split("/")[-1]
    instance = instance_client.get(project=project_id, zone=zone, instance=instance_id)
    current_vcpus = instance.machine_type.guest_cpus
    # 此处替换为从存储中读取的历史vCPU数值
    old_vcpus = 2
    if current_vcpus - old_vcpus == 2:
        print(f"实例{instance_id}的vCPU已增加2核")

内容的提问来源于stack exchange,提问作者Daniel Vanum

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 19:52:57