Sieć neuronowa do monitorowania serwera

11

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ć UPlub DOWN. Zarówno ni xsą 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?

Matt Williamson
źródło
Dlaczego inne metody klasyfikacji nie są tutaj odpowiednie? Wygląda na to, że zajmujesz się wieloma przypadkami, co prowadzi do zmniejszenia zestawu wyników. Ale to w zasadzie każdy przypadek uczenia się reprezentacji w klasyfikacji. Sieci neuronowe pomogą Ci ustalić, które efekty interakcji są predykcyjne, gdy cechy podstawowe nie są zbyt predykcyjne. W przeciwnym razie możesz użyć innych metod.
cwharland
Z zadowoleniem przyjmuję każde rozwiązanie. Sieć neuronowa była właśnie tą, którą próbowałem wykorzystać.
Matt Williamson
Ciekawy problem. Skoro opublikowałeś to ponad 6 miesięcy temu, czy mogę poprosić cię o potwierdzenie, że nadal jesteś tym zainteresowany, zanim spędzę czas na zadaniu ciosu?
Hack-R
Moją początkową myślą byłoby użycie losowego lasu regresji logistycznej w modelach typu na serwer. Następnie masz swoje testy porównawcze i szybko dowiesz się, czy sieć neuronowa da ci więcej. Sieci neuronowe nie zawsze dają najlepsze wyniki.
user1269942

Odpowiedzi:

2

Moim zdaniem szukasz niewłaściwych metod rozwiązania problemu.

Nie masz danych liczbowych.

Uczenie maszynowe oparte na statystykach ma bardzo trudne problemy z takimi problemami. Twój problem brzmi bardziej jak jeden z problemów, które należy rozwiązać w systemach opartych na regułach. Moim pierwszym instynktem byłoby próba zrozumienia zasad i wprowadzenia ich do kodu prowadzącego do klasyfikacji.

Istnieją jednak metody uczenia się takich systemów opartych na regułach opartych na logice. Są one dziś dość niemodne w uczeniu maszynowym. https://en.wikipedia.org/wiki/Rule-based_system

Tobias Würfl
źródło
+1, jeśli możesz łatwo zorientować się, czy / a następnie rozwiązać problem, nie ma sposobu, aby ANN przewyższał czystą logikę wnioskowania. Nawet argument statystyczny (usługa A nie działa na serwerach 5/6, a więc usługa A nie działa) jest lepszy niż radzenie sobie z narzutem wymaganym przez sieć neuronową.
Derek Janni
2

Zgodnie z powyższym komentarzem proponuję wypróbować podejście oparte na regułach. Dla każdego posiadanego serwera, przeszukaj jego usługi. Jeśli wszystkie usługi są wyłączone na serwerze, oznacza to problem z serwerem. W przypadku każdej usługi, jeśli żaden serwer nie zgłasza, że ​​usługa jest uruchomiona, oznacza to problem z usługą. W przypadku, gdy jest to jedno i drugie, otrzymasz powiadomienia dla każdego z nich, a następnie będziesz mógł sprawdzić, co się dzieje z którymkolwiek ze składników.

Koszt, utrzymanie i ryzyko złych wyników przy użyciu modelu ANN przewyższają proste, oparte na regułach rozwiązanie, a twój szef prawdopodobnie poklepie cię po plecach za robienie tego, co ma sens.

Jeśli naprawdę poważnie podchodzisz do utrzymania funkcjonalności serwerów i procesów, sugeruję zainwestowanie w usługę APM, która zapewnia niezawodne powiadomienia w czasie rzeczywistym o tym, co dzieje się w twoim środowisku produkcyjnym.

Jeśli próbujesz się dowiedzieć, jak działa ANN, wypróbuj inny problem. Każdy dobrze znany zestaw danych do klasyfikacji lub wykrywania anomalii zapewni ci o wiele lepszy wgląd w działanie ANN niż zestaw danych niestandardowych, co może być okropnie trudne do przekonania do skutecznego schematu uczenia się.

Derek Janni
źródło