Patrzę na pybrain do przyjmowania alarmów monitorowania serwera i określania głównej przyczyny problemu. Cieszę się ze szkolenia go przy użyciu nadzorowanego uczenia i doboru zestawów danych treningowych. Dane mają następującą strukturę:
- Typ serwera A # 1
- Typ alarmu 1
- Typ alarmu 2
- Typ serwera A # 2
- Typ alarmu 1
- Typ alarmu 2
- Typ serwera B # 1
- Typ alarmu 99
- Typ alarmu 2
Jest więc n serwerów z x alarmami, które mogą być UP
lub DOWN
. Zarówno n
i x
są zmienne.
Jeśli serwer A1 ma alarm 1 i 2 jako DOWN
, to możemy powiedzieć, że usługa a jest wyłączona na tym serwerze i jest przyczyną problemu.
Jeśli alarm 1 jest wyłączony na wszystkich serwerach, możemy powiedzieć, że przyczyną jest usługa a .
Przyczyną może być wiele opcji, więc prosta klasyfikacja nie wydaje się odpowiednia.
Chciałbym również powiązać późniejsze źródła danych z siecią. Takich jak skrypty wysyłające ping do niektórych usług zewnętrznych.
Wszystkie odpowiednie alarmy mogą nie zostać uruchomione jednocześnie, ze względu na szeregowe kontrole serwisowe, więc można zacząć od jednego serwera wyłączonego, a następnie innego serwera wyłączonego 5 minut później.
Na początku próbuję zrobić kilka podstawowych rzeczy:
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])
Ale z trudem odwzorowuję zmienne liczby alarmów na statyczne liczby wejść. Na przykład, jeśli dodamy alarm do serwera lub dodamy serwer, cała sieć musi zostać przebudowana. Jeśli jest to coś, co należy zrobić, mogę to zrobić, ale chcę wiedzieć, czy jest lepszy sposób.
Inną opcją, o której staram się myśleć, jest inna sieć dla każdego typu serwera, ale nie widzę, jak mogę wyciągnąć wnioski dotyczące całego środowiska, ponieważ będą one dokonywały oceny na jednym hoście zamiast wszystkie hosty naraz.
Jakiego rodzaju algorytmu należy użyć i jak zmapować zestaw danych, aby wyciągać wnioski dotyczące całego środowiska ze zmiennymi danymi wejściowymi?