1) 先把「閒置」跟「過度配置」分清楚
這兩件事差很多:閒置是「幾乎沒人用、也沒有明確任務」,過度配置是「有人用,但用不到這麼大」。 你不把它分開,後面的動作很容易做錯——該關的你不敢關,該縮的你去亂砍。
- 閒置(Idle):像是 PoC 伺服器、短期專案結束後忘記下架、或舊版本遺留。
- 過度配置(Over-provisioned):像是當初為了「保險」選了大一級,結果一年都沒碰到峰值。
2) 判定信號:不要只看一張 CPU 圖
最省事的方式是:先用少數幾個指標交叉驗證。你不需要把監控系統變成論文, 但至少要能回答:「它真的閒置嗎?還是只是工作型態比較特殊?」
(A)CPU / Network / Disk 的「同時很低」
CPU 很低不稀奇,很多服務就是 I/O 或網路型。真正比較有信心的閒置判定,通常是: CPU 長期低、Network In/Out 也低、Disk Read/Write 也低——三者一起低,才像是「真的沒人在用」。
(B)時間視窗要拉長:至少看一個完整週期
你只看三天,很容易被騙。很多公司週末沒有流量、月底有 batch、週一早上有報表。 至少看 2~4 週的 pattern,比看「某個安靜的晚上」可靠太多。
(C)看「它到底在跑什麼」:標籤、owner、用途描述
成本優化真正的阻力通常不是技術,是「沒人敢動」。原因也很現實:不知道這台是誰的、幹嘛用的、動了會不會出事。 所以判定閒置時,資源的標籤品質(owner / env / service)反而是關鍵。
3) 常見誤判:你以為閒置,其實它在做「你不會每天看到的工作」
最常見的誤判有兩類:一種是排程型工作(crontab / batch / ETL),平常很安靜但特定時間會吃滿; 另一種是「熱備援」或「故障切換」用途,平常低負載是正常的。
- 它是不是排程型工作?(半夜跑、月底跑、週一跑)
- 它是不是故障切換/備援?(平常低是設計如此)
- 有沒有掛在某個 ASG/ELB 後面?(不要只看單台)
- 它是不是跳板機、VPN、或內網工具?(用量低但必要)
- 它的 EBS/Elastic IP/安全群組有沒有被其他東西依賴?(關機前先釐清依賴)
4) 決策框架:關、縮、換、買(按風險與投報率)
我比較喜歡把行動選項壓成四種,這樣你跟同事討論時不會陷入無止盡的細節。 你只要決定:這台應該「關掉」、還是「縮小」、還是「換類型」、或是「長期承諾買更便宜」。
(A)關掉(Stop/Terminate):最直接、但要最小心
如果你真的高度懷疑它閒置,最保守的做法是先 Stop 一段時間觀察(例如一週),
看有沒有人喊痛。很多「沒人敢動」的機器,停了也沒人發現,那答案其實就很明顯了。
(B)縮小(Right-size):風險通常比你想像低
對於大多數過度配置,縮小一級(或改成 burstable)往往是最划算的第一步。 你不用一次縮到極限,先縮一級、觀察一週,再縮第二級,通常比一次到位安全。
(C)換(換 family / 換部署方式):專治「指標看起來怪怪的」
有些工作就是不吃 CPU、但吃記憶體;或是 I/O 型、需要不同家族。 這種時候你硬縮 vCPU 沒用,反而是換 family(或改用更合適的服務)更有效。
(D)買(Savings Plans / RI):針對「你確定會一直跑」的部分
如果你已經確定某些基礎負載就是會 24/7 跑,那就不要每個月用隨用隨付硬扛。 但前提是:先把閒置清掉、把規格縮到合理,再談承諾,才不會把浪費也一起買進去。