GCP权重号 谷歌云 GCP 账号资源利用率代办
别急着删实例,先看看它是不是在假装忙
GCP权重号 上周五下午三点,小王盯着GCP控制台里那台运行了178天、CPU平均使用率0.3%的n2-standard-4虚拟机,手指悬在「终止」按钮上方,呼吸略重——这台机器每月烧掉$68.92,相当于他两顿火锅加一杯喜茶。他深吸一口气,点了确认……三秒后,报警邮件弹出:「订单服务API延迟突增300ms」。原来,这台“养老院级”VM默默扛着每晚2:15的定时账单生成任务,用0.3%的CPU干着最狠的活。
这就是GCP资源利用率诊断最残酷的真相:数字会撒谎,图表会催眠,而你的删库跑路冲动,往往比监控告警来得更早一步。
第一步:别信默认仪表盘,信「过去7天峰值」
GCP Console首页那个「资源利用率概览」?建议当屏保看。它默认展示的是「平均值」——就像说「我今年平均每天睡6小时」,但实际是周一到周五通宵改bug,周末补觉到下午三点。真正要盯的,是过去7天每5分钟的CPU/内存/磁盘IOPS峰值曲线。路径:Cloud Monitoring → Metrics Explorer → 选资源类型(如gce_instance)→ 指标填agent.googleapis.com/cpu/utilization → 聚合方式选「max」而非「mean」。
我们曾发现某客户把「平均CPU 8%」当成闲置证据,结果拉出峰值图:每周二上午9:30-10:15,CPU飙到92%,持续18分钟——那是他们HR系统跑薪酬计算的黄金窗口。删了?全员工资条变乱码。
第二步:内存利用率?先问它「真吃还是假占」
GCP监控里显示内存使用率95%?别慌。Linux的free -h命令早把缓存(cache)算进「已用内存」,而GCP监控直接抓/proc/meminfo里的MemUsed,同样包含可回收缓存。实操口诀:看MemAvailable,不看MemUsed。
登录VM执行:cat /proc/meminfo | grep -E "^MemAvailable|^MemFree"
如果MemAvailable还有1.2GB,哪怕MemUsed显示98%,这台机器正舒服地用缓存加速IO,删它等于把SSD当U盘使。
附赠彩蛋:在Monitoring里新建指标,用PromQL写:1 - (node_memory_MemAvailable_bytes{job="gce-targets"} / node_memory_MemTotal_bytes{job="gce-targets"})
这个才是你该盯的「真实压力值」。
第三步:磁盘不是越大越好,是「读写节奏」决定生死
某电商客户坚持给所有VM配500GB SSD,理由是「以后要存日志」。结果审计发现:92%的实例磁盘月均写入量<2GB,但IOPS峰值常超300——因为他们的Java应用每秒生成17个临时文件,又立刻删除。问题不在容量,在fs.inotify.max_user_watches内核参数过低,导致文件监听队列溢出,触发疯狂重试。
查磁盘健康度,盯三个数:
• google.api/gce_instance/disk/write_ops_count(写IOPS)
• google.api/gce_instance/disk/read_bytes_count(读吞吐)
• google.api/gce_instance/disk/queue_length(队列深度)
若队列长度持续>2且IOPS<50,大概率是应用层文件操作模式有问题,换更大磁盘只会让问题更贵。
第四步:公网带宽——最隐蔽的「流量黑洞」
有位运维兄弟抱怨「明明没开Web服务,为啥每月流量费$220?」。我们导出compute.googleapis.com/instance/network/sent_bytes_count按小时聚合,发现凌晨3:00-5:00流量尖峰。SSH进去一查:sudo ss -tulnp | grep :80——空sudo lsof -i :80——空
最后用sudo tcpdump -i any port 80 -c 10抓包,发现是某Python脚本调用外部天气API,返回JSON里嵌了base64图片,每次请求拉取12MB……连续37天。
教训:GCP不监控「应用层协议」,只管字节数。想省钱?在VPC里配Network Firewall Rules,限制非必要端口出站流量,再配合Cloud Logging查jsonPayload.connection.dest_port字段,比看账单快十倍。
白嫖党必装的三大免费工具
① Recommender:GCP的「AI嘴替」
地址:Navigation menu → Operations → Recommender
它不光推荐「降配」,更关键的是告诉你「为什么」。比如提示「将n1-standard-2升级为e2-micro」时,会附带截图:过去14天CPU利用率中位数0.7%,内存峰值仅320MB。但注意!它不会告诉你这台VM是否跑着crontab里的0 3 * * * /usr/local/bin/backup.sh——所以点击「View details」后,务必手动ssh进去crontab -l。
② Cost Management:把账单变成侦探小说
路径:Billing → Reports → 新建报告
筛选条件拉满:按「服务」+「SKU」+「标签」+「项目ID」四维交叉。曾帮客户揪出「测试环境打上prod标签」的史诗级事故——一个标着env=prod的CI/CD流水线,每天凌晨自动创建20台GPU实例跑单元测试,账单藏在「Compute Engine GPU」分类下,半年无人认领。
③ Cloud Monitoring自定义告警:给资源贴「临终关怀」标签
创建规则:
• 条件:CPU平均<1% × 持续48小时
• 通知渠道:Slack + 邮件
• 关键动作:在告警消息里自动带上gcloud compute instances describe [INSTANCE] --format='value(tags.items)'结果
这样收到告警时,你能一眼看到这台VM是否绑定了keep-alive:true标签——有就留,没就约个会议再杀。
那些年我们删错的实例,后来都成了P0事故
• 某金融客户删了「无流量」的Redis实例,因未发现其承担着跨AZ的配置同步任务,导致新版本发布卡在灰度环节;
• 某游戏公司清退「零CPU」的K8s节点,结果该节点上跑着DaemonSet管理的log-agent,全集群日志断供47分钟;
• 最绝的是某SaaS厂商,用脚本批量停用「启动时间>90天」的实例,却忘了他们用Startup Script自动注册License,重启即失效……停机=服务不可用。
所以,我们团队立下铁律:所有资源操作前,必须完成「删前三秒冷静期」三连问:
❶ 它的gcloud compute instances describe输出里,metadata字段是否有startup-script或shutdown-script?
❷ 在Cloud Logging里搜resource.type="gce_instance" AND jsonPayload.instance_id="[ID]",最近7天有无ERROR级别日志?
❸ 执行gcloud compute ssh [INSTANCE] --command "sudo systemctl list-timers --all",看有没有藏着的定时任务?
结语:利用率不是KPI,是理解业务的翻译器
把GCP当Excel用的人,永远在删实例;把GCP当望远镜用的人,才看得见业务毛细血管里的血流速度。CPU低,未必闲;内存高,未必撑;磁盘大,未必稳;流量少,未必安。真正的资源优化,不是把数字压到最低,而是让每个字节、每个周期、每毫秒IO,都精准咬合在业务齿轮的齿槽里。
下次当你又想点那个红色的「Delete」按钮时,试试先泡杯茶,打开Cloud Shell,敲一行:gcloud compute instances describe $(hostname) --format='value(metadata.items)' 2>/dev/null | grep -q 'critical' && echo "STOP. THIS IS CRITICAL." || echo "OK. BUT STILL CHECK CRON."
——技术人的温柔,就藏在这行bash里。

