我正在寻找pybrain来接收服务器监视器警报并确定问题的根本原因。我很高兴使用监督学习对其进行培训并整理培训数据集。数据的结构如下:
- 服务器类型A#1
- 警报类型1
- 警报类型2
- 服务器类型A#2
- 警报类型1
- 警报类型2
- 服务器类型B#1
- 警报类型99
- 警报类型2
因此,有n台服务器,其中x个警报可以是UP
或DOWN
。这两个n
和x
是可变的。
如果服务器A1的警报1和2为DOWN
,则可以说该服务器上的服务a已关闭,并且是问题的原因。
如果所有服务器上的警报1都关闭,则可以说服务a是原因。
原因可能有多种选择,因此直接分类似乎不合适。
我还想将以后的数据源绑定到网络上。例如只是ping某些外部服务的脚本。
由于进行了串行服务检查,因此可能不会立即触发所有适当的警报,因此可以在一分钟内关闭一台服务器,然后在五分钟后关闭另一台服务器,从而启动警报。
首先,我正在尝试做一些基本的事情:
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])
但是,我很难将可变数量的警报映射到静态输入数量。例如,如果我们向服务器添加警报或添加服务器,则需要重建整个网络。如果那是需要做的事情,我可以做,但是想知道是否有更好的方法。
我尝试考虑的另一种选择是,每种类型的服务器都有不同的网络,但是我看不到如何得出环境范围的结论,因为它只会在单个主机上进行评估,而不是在单个主机上进行评估。所有主机一次。
我应该使用哪种算法,以及如何映射数据集以得出具有可变输入的整体环境结论?