Sto esaminando Pybrain per aver preso gli allarmi di monitoraggio del server e per determinare la causa principale di un problema. Sono contento di allenarlo utilizzando l'apprendimento supervisionato e curando i set di dati di allenamento. I dati sono strutturati in questo modo:
- Server Tipo A # 1
- Tipo di allarme 1
- Tipo di allarme 2
- Server Tipo A # 2
- Tipo di allarme 1
- Tipo di allarme 2
- Tipo server B # 1
- Tipo di allarme 99
- Tipo di allarme 2
Quindi ci sono n server, con x allarmi che possono essere UP
o DOWN
. Entrambi n
e x
sono variabili.
Se il Server A1 ha gli allarmi 1 e 2 come DOWN
, allora possiamo dire che il servizio a è inattivo su quel server ed è la causa del problema.
Se l' allarme 1 è inattivo su tutti i server, allora possiamo dire che il servizio a è la causa.
Potrebbero esserci più opzioni per la causa, quindi la classificazione semplice non sembra appropriata.
Vorrei anche collegare le fonti di dati successive alla rete. Come solo script che eseguono il ping di alcuni servizi esterni.
Tutti gli allarmi appropriati potrebbero non essere attivati contemporaneamente, a causa dei controlli del servizio seriale, quindi può iniziare con un server inattivo e un altro server inattivo 5 minuti dopo.
Sto provando a fare alcune cose di base all'inizio:
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])
Ma [faccio fatica a mappare numeri variabili di allarmi su numeri statici di ingressi. Ad esempio, se aggiungiamo un allarme a un server o aggiungiamo un server, l'intera rete deve essere ricostruita. Se è qualcosa che deve essere fatto, posso farlo, ma voglio sapere se esiste un modo migliore.
Un'altra opzione che sto cercando di pensare è quella di avere una rete diversa per ogni tipo di server, ma non vedo come posso trarre una conclusione a livello di ambiente, dal momento che farà solo valutazioni su un singolo host, invece di tutti gli host contemporaneamente.
Quale tipo di algoritmo dovrei usare e come posso mappare il set di dati per trarre conclusioni globali sull'ambiente con input variabili?