Neuronales Netz zur Serverüberwachung

11

Ich schaue auf Pybrain, um Server-Monitor-Alarme zu nehmen und die Grundursache eines Problems zu ermitteln. Ich bin zufrieden mit dem Training mit überwachtem Lernen und dem Kuratieren der Trainingsdatensätze. Die Daten sind ungefähr so ​​strukturiert:

  • Servertyp A # 1
    • Alarmtyp 1
    • Alarmtyp 2
  • Servertyp A # 2
    • Alarmtyp 1
    • Alarmtyp 2
  • Servertyp B # 1
    • Alarmtyp 99
    • Alarmtyp 2

Es gibt also n Server mit x Alarmen, die UPoder sein können DOWN. Beide nund xsind variabel.

Wenn Server A1 Alarm 1 & 2 als hat DOWN, können wir sagen, dass Dienst a auf diesem Server nicht verfügbar ist und die Ursache des Problems ist.

Wenn Alarm 1 auf allen Servern ausgefallen ist, können wir sagen, dass Service a die Ursache ist.

Es kann möglicherweise mehrere Optionen für die Ursache geben, sodass eine direkte Klassifizierung nicht angemessen erscheint.

Ich möchte auch spätere Datenquellen an das Netz binden. Zum Beispiel nur Skripte, die einen externen Dienst anpingen.

Aufgrund von seriellen Serviceprüfungen werden möglicherweise nicht alle entsprechenden Alarme gleichzeitig ausgelöst, sodass ein Server 5 Minuten später heruntergefahren und ein anderer Server heruntergefahren werden kann.

Ich versuche zunächst einige grundlegende Dinge zu tun:

from pybrain.tools.shortcuts import buildNetwork
from pybrain.datasets import SupervisedDataSet
from pybrain.supervised.trainers import BackpropTrainer


INPUTS = 2
OUTPUTS = 1

# Build network

# 2 inputs, 3 hidden, 1 output neurons
net = buildNetwork(INPUTS, 3, OUTPUTS)


# Build dataset

# Dataset with 2 inputs and 1 output
ds = SupervisedDataSet(INPUTS, OUTPUTS)


# Add one sample, iterable of inputs and iterable of outputs
ds.addSample((0, 0), (0,))



# Train the network with the dataset
trainer = BackpropTrainer(net, ds)

# Train 1000 epochs
for x in xrange(10):
    trainer.train()

# Train infinite epochs until the error rate is low
trainer.trainUntilConvergence()


# Run an input over the network
result = net.activate([2, 1])

Aber es fällt mir schwer, die variable Anzahl von Alarmen der statischen Anzahl von Eingaben zuzuordnen. Wenn wir beispielsweise einem Server einen Alarm hinzufügen oder einen Server hinzufügen, muss das gesamte Netz neu erstellt werden. Wenn das getan werden muss, kann ich es tun, möchte aber wissen, ob es einen besseren Weg gibt.

Eine andere Option, an die ich zu denken versuche, ist, für jeden Servertyp ein anderes Netz zu haben, aber ich sehe nicht, wie ich eine umweltweite Schlussfolgerung ziehen kann, da nur Auswertungen auf einem einzelnen Host statt auf einem einzigen Host durchgeführt werden alle Gastgeber auf einmal.

Welche Art von Algorithmus sollte ich verwenden und wie ordne ich den Datensatz zu, um insgesamt umweltbezogene Schlussfolgerungen mit variablen Eingaben zu ziehen?

Matt Williamson
quelle
Warum sind andere Klassifizierungsmethoden hier nicht geeignet? Klingt so, als wären Sie mit mehreren Fällen befasst, die zu einer reduzierten Anzahl von Ausgaben führen. Dies ist jedoch im Grunde jeder Fall von Repräsentationslernen in der Klassifikation. Neuronale Netze helfen Ihnen dabei, herauszufinden, welche Interaktionseffekte vorhersagbar sind, wenn Basismerkmale nicht zu vorhersagbar sind. Andernfalls könnten Sie andere Methoden verwenden.
cwharland
Ich begrüße jede Lösung. Das neuronale Netz war genau das, was ich zu nutzen versuchte.
Matt Williamson
Interessantes Problem. Da Sie dies vor über 6 Monaten gepostet haben, kann ich Sie dazu bringen, zu bestätigen, dass Sie immer noch daran interessiert sind, bevor ich Zeit damit verbringe, es zu versuchen?
Hack-R
Mein erster Gedanke wäre, eine zufällige Gesamtstruktur logistischer Regression für Modelle vom Typ Server zu verwenden. Dann haben Sie Ihre Benchmarks und Sie werden ziemlich schnell herausfinden, ob ein neuronales Netz Ihnen mehr bietet. Neuronale Netze liefern nicht immer die besten Ergebnisse.
user1269942

Antworten:

2

Meiner Meinung nach suchen Sie nach den falschen Methoden, um Ihr Problem zu lösen.

Sie haben streng keine numerischen Daten.

Statistikbasiertes maschinelles Lernen hat es mit solchen Problemen sehr schwer. Ihr Problem klingt eher nach einem der Probleme, die mit regelbasierten Systemen gelöst werden sollten. Mein erster Instinkt wäre, zu versuchen, die Regeln zu verstehen und sie in Code zu setzen, der zu einer Klassifizierung führt.

Es gibt jedoch Methoden zum Erlernen solcher regelbasierter Systeme, die auf Logik basieren. Sie sind für maschinelles Lernen heute nur noch ziemlich unmodern.https://en.wikipedia.org/wiki/Rule-based_system

Tobias Würfl
quelle
+1, Wenn Sie leicht herausfinden können, ob / dann ein Problem angegangen werden kann, kann ANN die reine Inferenzlogik auf keinen Fall übertreffen. Sogar ein statistisches Argument (Dienst A ist auf 5/6-Servern nicht verfügbar, daher ist Dienst A nicht verfügbar) ist besser als der Overhead, der für ein neuronales Netz erforderlich ist.
Derek Janni
2

In Übereinstimmung mit dem obigen Kommentar schlage ich vor, dass Sie einen regelbasierten Ansatz versuchen. Fragen Sie für jeden Server, den Sie haben, seine Dienste ab. Wenn alle Dienste auf einem Server nicht verfügbar sind, liegt ein Serverproblem vor. Wenn für jeden Dienst kein Server meldet, dass der Dienst ausgeführt wird, liegt ein Problem mit dem Dienst vor. In dem Fall, dass es beides ist, erhalten Sie für jeden eine Benachrichtigung und können dann überprüfen, was mit einem der Bestandteile los ist.

Die Kosten, die Wartung und das Risiko schlechter Ergebnisse bei Verwendung eines ANN-Modells übersteigen alle die einfache, regelbasierte Lösung, und Ihr Chef wird Ihnen wahrscheinlich auf den Rücken klopfen, wenn Sie nur das tun, was hier Sinn macht.

Wenn Sie es wirklich ernst meinen, Ihre Server und Prozesse funktionsfähig zu halten, empfehlen wir Ihnen, in einen APM-Service zu investieren, der Ihnen zuverlässige Echtzeitbenachrichtigungen über die Vorgänge in Ihrer Produktionsumgebung bietet.

Wenn Sie nur versuchen zu lernen, wie ANN funktioniert, versuchen Sie es mit einem anderen Problem. Jeder bekannte Datensatz zur Klassifizierung oder Erkennung von Anomalien bietet Ihnen viel mehr Einblick in die Funktionsweise von ANN als ein benutzerdefinierter Datensatz, der fürchterlich schwer zu einem effektiven Lernschema zu erzwingen ist.

Derek Janni
quelle