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 UP
oder sein können DOWN
. Beide n
und x
sind 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?
quelle
Antworten:
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
quelle
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.
quelle