Outliers

如何識別服務器正常運行時間性能數據中的異常值?

  • January 5, 2011

我有一個 python 腳本,它創建服務器正常運行時間和性能數據列表的列表,其中每個子列表(或“行”)包含特定集群的統計信息。例如,很好地格式化它看起來像這樣:

-------  -------------  ------------  ----------  -------------------
Cluster  %Availability  Requests/Sec  Errors/Sec  %Memory_Utilization
-------  -------------  ------------  ----------  -------------------
ams-a    98.099          1012         678          91
bos-a    98.099          1111         12           91
bos-b    55.123          1513         576          22
lax-a    99.110          988          10           89
pdx-a    98.123          1121         11           90
ord-b    75.005          1301         123          100
sjc-a    99.020          1000         10           88
...(so on)...

所以在列表形式中,它可能看起來像:

[[ams-a,98.099,1012,678,91],[bos-a,98.099,1111,12,91],...]

我的問題:

  • 確定每列中異常值的最佳方法是什麼?或者異常值不一定是解決“壞處”問題的最佳方法?

在上面的數據中,我肯定想知道 bos-b 和 ord-b,還有 ams-a,因為它的錯誤率很高,但其他的可以丟棄。取決於列,因為更高不一定更糟,也不一定更低,我試圖找出最有效的方法來做到這一點。似乎 numpy 被提到了很多這類東西,但不知道從哪裡開始(遺憾的是,我比統計學家更像是系統管理員……)。當我在 Stack Overflow 上詢問時,有人提到使用 numpy 的 scoreatpercentile 函數並丟棄超過 99% 的任何東西——這看起來是個好主意嗎?

(從stackoverflow交叉發布,這裡:https ://stackoverflow.com/questions/4606288 )

根據您提出問題的方式

異常值不一定是解決發現“壞處”問題的最佳方法嗎?

目前尚不清楚您是否正在尋找異常值。例如,您似乎對性能高於/低於某個閾值的機器感興趣。

舉個例子,如果你所有的服務器都是 980.1% 的可用性,100% 可用性的服務器將是一個異常值,97.6% 可用性的服務器也是如此。但這些可能在您想要的範圍內。

另一方面,可能有充分的先驗理由希望在可用性低於 95% 的情況下收到任何服務器的通知,無論是否有一個或多個服務器低於此閾值。

出於這個原因,對異常值的搜索可能無法提供您感興趣的信息。閾值可以根據歷史數據進行統計確定,例如通過將錯誤率建模為泊鬆或將可用性百分比建模為 beta 變量。在應用設置中,這些閾值可能會根據性能要求來確定。

引用自:https://stats.stackexchange.com/questions/6013

comments powered by Disqus