サーバー稼働時間パフォーマンスデータの外れ値を特定する方法


8

サーバーの稼働時間とパフォーマンスデータのリストのリストを作成する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

回答:


13

質問の言い方に基づいて

外れ値は必ずしも「悪さ」を見つける問題を攻撃する最良の方法ではありませんか?

外れ値を探していることは明らかではありません。たとえば、あるしきい値を上回ったり下回ったりするマシンに興味があるようです。

たとえば、すべてのサーバーが98 0.1%の可用性にある場合、100%の可用性にあるサーバーは97.6%の可用性にあるサーバーと同様に異常値になります。しかし、これらは望ましい制限内にある可能性があります。±

一方、このしきい値を下回るサーバーが1つ以上あるかどうかに関係なく、95%未満の可用性でサーバーに通知することを事前に決定するのには、十分な理由がある場合があります。

このため、外れ値を検索しても、関心のある情報が得られない場合があります。しきい値は、履歴データに基づいて統計的に決定できます。たとえば、エラー率をポアソンとしてモデリングしたり、稼働率をベータ変数としてモデリングしたりできます。適用される設定では、これらのしきい値はパフォーマンス要件に基づいて決定される可能性があります。


2
+1(明記されたものではなく)明白な質問に対処するため。
whuber

4

異常なサーバーを見つける簡単な方法は、サーバーがまったく同じように分布していると想定し、母集団パラメーターを推定し、可能性に従って昇順に並べ替えることです。列の尤度は、それらの積またはそれらの最小値(またはその他のTノルム)と組み合わせられます。外れ値がまれである限り、これはかなりうまくいきます。外れ値の検出自体については、安定した母集団パラメーターは通常、発見された外れ値を削除することによって反復的に推定されますが、リストを手動で検査してしきい値処理を回避している限り、それは重要ではありません。

可能性については、プロポーションにはベータ、レートにはポアソンを試してみてください。

Davidが指摘したように、外れ値の検出は信頼性分析とまったく同じではなく、しきい値を超えるすべてのサーバーにフラグを立てます。さらに、損失関数を通じて問題にアプローチする人もいます。あるサーバーの可用性が50%またはエラー率500のときに感じる痛みを定義し、その痛みに応じてランク付けします。


2

特定のデータポイントを外れ値として識別することは、データの取得元となるデータ生成プロセスまたはモデルがあることを意味します。懸念されている特定のメトリックとクラスターのモデルがわからないようです。そこで、ここで私が検討することを検討します。統計的プロセス管理図

ここでのアイデアは
-%Availability-
リクエスト/秒
-エラー/秒
-%Memory_Utilization を収集することです

各クラスターのメトリック。指標ごとに、「妥当」または制御可能な値のみを含むデータのサブセットを作成します。この制御データに基づいて、各メトリックのグラフを作成します。次に、ライブデータをチャートコードに送り始め、メトリックが制御されているかどうかを視覚的に評価できます。

もちろん、多くのクラスターにまたがる複数のメトリックに対して視覚的にこれを実行することは現実的ではないかもしれませんが、これは、直面しているダイナミクスについて学び始めるための良い方法である可能性があります。次に、制御不能になったメトリックを持つクラスターの通知サービスを作成します。これらの線に沿って、私はニューラルネットワークを使用して、管理図のパターンをOKと特定の制御不能の特定のフレーバー(たとえば、%可用性の下降傾向またはエラー/秒での周期的な動作)として自動的に分類しました。これを行うと、統計的工程管理図(製造設定で長く使用されます)の利点が得られますが、専門家の解釈に基づいてパターンを分類するニューラルネットワークをトレーニングできるため、実際に図を見るのに多くの時間を費やす負担が軽減されます。

コードに関しては、pypiにspcパッケージがありますが、これを使用した経験はありません。ニューラルネットワーク(ナイーブベイズも)を使用した私のおもちゃの例は、ここにあります


サンプルコードへのポインタをありがとう、私はそれをチェックします!
セプタムグラム2011年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.