Estou olhando o pybrain para receber alarmes do monitor do servidor e determinar a causa raiz de um problema. Fico feliz em treiná-lo usando aprendizado supervisionado e selecionando os conjuntos de dados de treinamento. Os dados estão estruturados mais ou menos assim:
- Servidor Tipo A # 1
- Tipo de alarme 1
- Tipo de alarme 2
- Servidor Tipo A # 2
- Tipo de alarme 1
- Tipo de alarme 2
- Servidor Tipo B # 1
- Tipo de alarme 99
- Tipo de alarme 2
Portanto, existem n servidores, com x alarmes que podem ser UPou DOWN. Ambos ne xsão variáveis.
Se o Servidor A1 tiver o alarme 1 e 2 como DOWN, então podemos dizer que o serviço a está inativo nesse servidor e é a causa do problema.
Se o alarme 1 estiver desativado em todos os servidores, podemos dizer que o serviço a é a causa.
Pode haver potencialmente várias opções para a causa, portanto, a classificação direta não parece apropriada.
Eu também gostaria de vincular fontes de dados posteriores à rede. Como apenas scripts que fazem ping em algum serviço externo.
Todos os alarmes apropriados podem não ser acionados de uma só vez, devido a verificações de serviço serial, para que ele possa iniciar com um servidor inoperante e outro inoperante 5 minutos depois.
Estou tentando fazer algumas coisas básicas no começo:
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])
Mas estou com dificuldade para mapear números variáveis de alarmes para números estáticos de entradas. Por exemplo, se adicionarmos um alarme a um servidor ou adicionarmos um servidor, toda a rede precisará ser reconstruída. Se isso é algo que precisa ser feito, eu posso fazê-lo, mas quero saber se há uma maneira melhor.
Outra opção que estou tentando pensar é ter uma rede diferente para cada tipo de servidor, mas não vejo como tirar uma conclusão em todo o ambiente, pois ele fará apenas avaliações em um único host, em vez de todos os hosts de uma vez.
Que tipo de algoritmo devo usar e como mapeio o conjunto de dados para tirar conclusões em todo o ambiente com entradas variáveis?