🎯 什麼情境該想到我

當你「用平均值加減標準差設告警,結果不是一直亂響、就是真的出事時完全沒響」的時候。

⚙️ 怎麼用(步驟 / 公式)

意圖:當遙測資料不是常態分佈時,改用不假設分佈形狀的技術找出值得注意的變異。

先確認你踩到的是這個問題:

  • Dr. Toufic Boubez 的描述:不只凌晨兩點被叫醒,還會在 2:37、4:13、5:17 一直被叫醒——這正是底層資料不是 Gaussian distribution 時會發生的事。
  • 分佈不是鐘形時,標準差的那些性質全都不適用。書中的例子是「每分鐘同時下載數」:畫成直方圖後明顯偏斜向低端,多數時間下載很少,但常常尖峰到三個標準差以上,於是幾乎每個時段都在告警
  • Dr. Nicole Forsgren:Ops 的很多資料集是 chi squared 分佈,用標準差不只會 over-alert 或 under-alert,還會算出無意義的結果——例如「低於均值三個標準差的同時下載數」會是負數
  • under-alert 一樣嚴重:完成交易數在白天因軟體元件故障掉了 50%,只要還落在三個標準差內就不會告警,結果是客戶比你先發現問題

三類可用技術(書中列出的):

  • Smoothing/moving average(平滑化/移動平均):特別適合 time series(每個資料點都有時間戳,如下載事件、完成交易事件)。做法是用滑動視窗把每個點與視窗內其他資料一起平均,藉此抹平短期波動、凸顯長期趨勢或週期。書中的示範是 thirty day moving average(過去三十天的平均)
  • Fast Fourier Transform(FFT):書中說它已廣泛用於影像處理;Netflix 的 Scryer 就是用 outlier detection 丟掉雜訊點後,再用 FFT 與 linear regression 平滑資料,同時保留會反覆出現的真實流量尖峰。
  • Kolmogorov-Smirnov test:書中明說可以在 Graphite 和 Grafana 裡找到,常用於判斷兩組資料是否顯著不同,適合週期/季節性的指標資料。Boubez 的說法是:這類 non-parametric 技術對 Ops 資料特別好用,因為它不對常態性或任何機率分佈做假設;它比較的是兩個機率分佈,因此能找出「今天跟往常的今天不一樣」這種逐日/逐週的變異。
  • 書中案例:一個電商每分鐘交易數的圖有明顯週週期(週末下滑),第四週的星期一交易量沒有回到正常水準。用 3σ 規則只會告警兩次、完全錯過那個關鍵的週一下滑;套上 K-S filter 後就標示出了那個異常的星期一。

組織上怎麼補這個能力:

  • 這些技術在預測上很有用,所以可以去 Marketing 或 Business Intelligence 部門找具備相關知識與技能的人,一起找出共同問題、用更好的異常偵測與事故預測來解決。
  • 或像 Rally Software 那樣(Tarun Reddy):把所有生產指標放進 Tableau,並配置一位受過統計訓練、會寫 R 的 Ops 工程師;她有自己的 backlog,裝滿公司其他團隊「想更早找出變異」的需求。
  • 可用工具:Etsy 開源的 Oculus(找出形狀相似、可能有相關性的圖)、Opsweekly(追蹤告警數量與頻率)、Skyline(嘗試辨識系統與應用圖表中的異常行為)。

案例(Netflix Scryer,2012):Scryer 用歷史使用模式預測客戶需求並預先備妥容量,補足 Amazon Auto Scaling(AAS)的三個缺點——(1) AWS instance 啟動需要十到四十五分鐘,追不上突發尖峰;(2) outage 後需求驟降導致 AAS 砍掉過多運算容量;(3) AAS 不會把已知的流量模式納入排程。Netflix 的觀看模式雖然不是高斯分佈,卻高度一致且可預測。上線數月後,觀看體驗、服務可用性都改善,EC2 成本下降。

原文:「explains, “In Operations, many of our data sets have what we call ‘chi squared’」(L8340)

原文:「has been widely used in image processing, and the Kolmogorov-Smirnov test」(L8446,接 L8447「(found in Graphite and Grafana), which is often used to find similarities or」)

原文:「great for Operations data, because it makes no assumptions about」(L8498,接 L8499「normality or any other probability distribution, which is crucial for us」)

原文:「can be ten to forty-five minutes, additional compute capacity was」(L8373)

🧪 我實際套用的紀錄

  • (待填)

⚠️ 注意 / 什麼時候不適用

  • 書中沒有給 Kolmogorov-Smirnov 的任何參數、門檻或視窗大小——它明講這個案例「不是教學(not as a tutorial)」,只是展示這類統計技術可以怎麼用。要落地就得自己實驗,不要照抄不存在的數字。
  • 有些能力內建在監控工具裡,有些需要具統計技能的人幫忙;沒有這個人就別假裝有。
  • 「移動平均 30 天」是書中的示範,不是通用建議;視窗長度取決於你的資料週期。
  • 資料真的是常態分佈時,回頭用簡單的 均值與標準差告警 就夠了,不必動用這些工具。

🔗 相關工具