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?