本章目標理解為什麼連續數據監控適合用滑動視窗,而不是每次重算整段區間
用 Python 建立可重現的固定視窗總和與峰值區間分析流程
把錯誤率、流量或工單數量轉成可驗證的告警判斷問題
情境與限制情境:你正在看每分鐘錯誤數、每小時訂單量或每 5 分鐘客服工單量,想知道哪一段時間真的超標
輸入:依時間順序排列的一串非負數值
輸出:所有超過門檻的視窗區段,以及總量最高的區間
限制:視窗大小固定,而且資料可能很長,不適合每個區段都重算一次總和
可重現規則本章程式碼位置:
examples/ch09/本章核心模組:
examples/ch09/monitoring.py測試:
pytest -q tests/test_ch09_sliding_windows_and_monitoring.py典型用途:錯誤監控、流量尖峰判斷、營運量能預警、工單暴增區段分析
監控問題為何要看一段時間,而不是單一時間點¶
很多監控問題看起來像是在問「哪個時間點最大」,但真正有意義的問題往往是「哪一段時間持續偏高」。例如單一分鐘流量高,未必代表系統異常;但連續 15 分鐘都高,通常就值得介入。
滑動視窗的核心價值,在於它把「固定長度區段」當成觀察單位,而且每往前移一步,只需要扣掉舊值、補上新值,不必整段重算。這對長時間序列特別重要,因為你會頻繁地檢查很多相鄰區間。
為什麼不是每次重新加總¶
假設你要檢查長度為 5 的所有區段。如果每次都重新把 5 個值加總一次,資料量一長,重複工作就會很多。滑動視窗的做法則是:
先算出第一個視窗的總和。
視窗往右移時,減掉離開的值,再加上新進來的值。
這讓你能快速掃描所有固定長度區段,並把注意力放在真正超標的地方。
告警與峰值其實是兩種問題¶
實務上常見兩個不同需求:
哪些區段超過門檻,需要觸發告警?
所有區段裡,哪一段總量最高,最值得回頭分析?
本章會把這兩種需求拆開處理,因為前者重點是列出所有異常,後者重點則是找出單一最需要關注的峰值區間。
實作範例¶
請參考 examples/ch09/monitoring.py。請在專案根目錄執行程式,以確保路徑正確。
from examples.ch09.monitoring import find_alert_windows, max_window_sum
traffic = [10, 15, 80, 90, 85, 20, 10]
window_size = 3
threshold = 200
alerts = find_alert_windows(traffic, window_size, threshold)
print("超標區段:", alerts)
# 超標區段: [(2, 5, 255)] # 索引 2~4 總和為 255
best_sum, best_range = max_window_sum(traffic, window_size)
print(f"最大區段: 索引 {best_range},總量 {best_sum}")
# 最大區段: 索引 (2, 5),總量 255示範流程包含:
驗證資料值、視窗大小與門檻是否合法
用滑動視窗找出所有超過門檻的區段
找出固定視窗下總量最高的一段
在資料不足或視窗不合法時明確回報錯誤