Wie identifiziere ich Ausreißer in den Leistungsdaten der Serververfügbarkeit?

8

Ich habe ein Python-Skript, das eine Liste von Listen mit Server-Verfügbarkeits- und Leistungsdaten erstellt, wobei jede Unterliste (oder 'Zeile') die Statistiken eines bestimmten Clusters enthält. Zum Beispiel sieht es gut formatiert so aus:

-------  -------------  ------------  ----------  -------------------
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)...

In Listenform könnte es also so aussehen:

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

Meine Frage:

  • Wie lassen sich die Ausreißer in jeder Spalte am besten ermitteln? Oder sind Ausreißer nicht unbedingt der beste Weg, um das Problem der Suche nach „Schlechtigkeit“ anzugehen?

In den obigen Daten möchte ich auf jeden Fall etwas über bos-b und ord-b sowie ams-a wissen, da die Fehlerrate so hoch ist, aber die anderen können verworfen werden. Je nach Spalte versuche ich, den effizientesten Weg zu finden, da höher nicht unbedingt schlechter oder niedriger ist. Scheint, als würde Numpy für diese Art von Sachen oft erwähnt, aber ich bin mir nicht sicher, wo ich damit anfangen soll (leider bin ich mehr Systemadministrator als Statistiker ...). Als ich bei Stack Overflow nachfragte, erwähnte jemand, dass er die Scoreatpercentile-Funktion von numpy verwendet und etwas über das 99. Perzentil hinauswirft - scheint das eine gute Idee zu sein?

(Cross-Posting von stackoverflow hier: /programming/4606288 )

Septagramm
quelle

Antworten:

13

Basierend auf der Art und Weise, wie Sie die Frage formulieren

Sind Ausreißer nicht unbedingt der beste Weg, um das Problem der Suche nach „Schlechtigkeit“ anzugehen?

Es ist nicht klar, dass Sie nach Ausreißern suchen. Zum Beispiel scheinen Sie an Maschinen interessiert zu sein, die über / unter einem bestimmten Schwellenwert arbeiten.

±

Auf der anderen Seite kann es gute Gründe geben, von vornherein über Server mit einer Verfügbarkeit von weniger als 95% benachrichtigt werden zu wollen, unabhängig davon, ob sich ein oder mehrere Server unterhalb dieses Schwellenwerts befinden oder nicht.

Aus diesem Grund liefert eine Suche nach Ausreißern möglicherweise nicht die Informationen, an denen Sie interessiert sind. Die Schwellenwerte können statistisch basierend auf historischen Daten ermittelt werden, z. B. durch Modellieren der Fehlerrate als Poisson oder der prozentualen Verfügbarkeit als Beta-Variablen. In einer angewendeten Einstellung könnten diese Schwellenwerte wahrscheinlich basierend auf den Leistungsanforderungen bestimmt werden.

David LeBauer
quelle
2
+1 für die Beantwortung der offensichtlichen (und nicht der angegebenen) Frage, die viel mehr auf den Punkt bringt.
whuber
4

Eine einfache Möglichkeit, anomale Server zu finden, besteht darin, anzunehmen, dass sie identisch verteilt sind, die Populationsparameter zu schätzen und sie nach aufsteigenden Wahrscheinlichkeiten zu sortieren. Spaltenwahrscheinlichkeiten würden entweder mit ihrem Produkt oder ihrem Minimum (oder einer anderen T-Norm) kombiniert. Dies funktioniert ziemlich gut, solange Ausreißer selten sind. Für die Erkennung von Ausreißern selbst werden stabile Populationsparameter normalerweise iterativ geschätzt, indem erkannte Ausreißer gelöscht werden. Dies ist jedoch nicht unbedingt erforderlich, solange Sie die Liste manuell überprüfen und dadurch Schwellenwerte vermeiden.

Für die Wahrscheinlichkeiten könnten Sie Beta für die Proportionen und Poisson für die Raten versuchen.

Wie David hervorhob, ist die Ausreißererkennung nicht ganz dasselbe wie die Zuverlässigkeitsanalyse, bei der alle Server gekennzeichnet werden, die einen bestimmten Schwellenwert überschreiten. Darüber hinaus würden sich einige Leute dem Problem durch Verlustfunktionen nähern - indem sie den Schmerz definieren, den Sie empfinden, wenn ein Server eine Verfügbarkeit von 50% oder eine Fehlerrate von 500 aufweist, und ihn dann nach diesem Schmerz einstufen.

sesqu
quelle
2

Das Identifizieren eines bestimmten Datenpunkts als Ausreißer impliziert, dass es einen Datenerzeugungsprozess oder ein Datenmodell gibt, von dem die Daten voraussichtlich stammen. Es hört sich so an, als wären Sie sich nicht sicher, welche Modelle für die angegebenen Metriken und Cluster geeignet sind, um die Sie sich Sorgen machen. Hier ist also, was ich untersuchen möchte: statistische Prozesskontrolldiagramme .

Die Idee hier wäre, die
-% Verfügbarkeit
- Anforderungen / Sek
- Fehler / Sek
-% Memory_Utilization zu sammeln

Metriken für jeden Ihrer Cluster. Erstellen Sie für jede Metrik eine Teilmenge der Daten, die nur Werte enthält, die "angemessen" sind oder die Kontrolle haben. Erstellen Sie die Diagramme für jede Metrik basierend auf diesen Kontrolldaten. Anschließend können Sie Live-Daten in Ihren Diagrammcode einspeisen und visuell beurteilen, ob die Metriken die Kontrolle haben oder nicht.

Natürlich ist es möglicherweise nicht möglich, dies visuell für mehrere Metriken in vielen Clustern durchzuführen, aber dies könnte ein guter Weg sein, um mehr über die Dynamik zu erfahren, mit der Sie konfrontiert sind. Anschließend können Sie einen Benachrichtigungsdienst für Cluster mit Metriken erstellen, die außer Kontrolle geraten. In diesem Sinne habe ich mit der Verwendung neuronaler Netze gespielt, um Kontrolldiagrammmuster automatisch als OK gegenüber einer bestimmten Art von außer Kontrolle geratenen Verhaltensweisen zu klassifizieren (z. B.% Verfügbarkeitstrend nach unten oder zyklisches Verhalten in Fehlern / Sek.). Auf diese Weise erhalten Sie die Vorteile statistischer Prozesssteuerungsdiagramme (die seit langem in Fertigungseinstellungen verwendet werden), müssen jedoch nicht mehr viel Zeit damit verbringen, Diagramme tatsächlich zu betrachten, da Sie ein neuronales Netzwerk trainieren können, um Muster anhand Ihrer Experteninterpretation zu klassifizieren.

Was den Code betrifft , gibt es das SPC-Paket auf Pypi, aber ich habe keine Erfahrung damit. Mein Spielzeugbeispiel für die Verwendung neuronaler Netze (auch naive Bayes) finden Sie hier .

Josh Hemann
quelle
Vielen Dank für einen Hinweis auf einen Beispielcode, ich werde es überprüfen!
Septagramm