我正在查看 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 一些外部服务的脚本。
由于串行服务检查,所有适当的警报可能不会立即触发,因此它可以从一台服务器停机开始,然后在 5 分钟后另一台服务器停机。
我首先尝试做一些基本的事情:
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])
但是我很难将可变数量的警报映射到静态输入数量。比如我们给一个服务器加一个报警器,或者加一个服务器,整个网络都需要重建。如果这是需要做的事情,我可以做,但想知道是否有更好的方法。
我正在尝试考虑的另一个选择是为每种类型的服务器使用不同的网络,但我不知道如何得出整个环境的结论,因为它只会在单个主机上进行评估,而不是所有主机一次。
我应该使用哪种类型的算法以及如何映射数据集以使用可变输入得出整个环境范围的结论?