用于服务器监控的神经网络

数据挖掘 机器学习 神经网络
2021-09-17 05:57:06

我正在查看 pybrain 以获取服务器监视器警报并确定问题的根本原因。我很高兴使用监督学习和管理训练数据集对其进行训练。数据的结构如下:

  • 服务器类型A #1
    • 警报类型 1
    • 警报类型 2
  • 服务器类型A #2
    • 警报类型 1
    • 警报类型 2
  • 服务器类型B #1
    • 报警类型99
    • 警报类型 2

所以有n 个服务器,x 个警报可以是UPDOWNn都是x可变的。

如果服务器 A1 的警报 1 和 2DOWN,那么我们可以说该服务器上的服务 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])

但是我很难将可变数量的警报映射到静态输入数量。比如我们给一个服务器加一个报警器,或者加一个服务器,整个网络都需要重建。如果这是需要做的事情,我可以做,但想知道是否有更好的方法。

我正在尝试考虑的另一个选择是为每种类型的服务器使用不同的网络,但我不知道如何得出整个环境的结论,因为它只会在单个主机上进行评估,而不是所有主机一次。

我应该使用哪种类型的算法以及如何映射数据集以使用可变输入得出整个环境范围的结论?

2个回答

在我看来,您正在寻找解决问题的错误方法。

您严格来说没有数字数据。

基于统计的机器学习很难解决这些问题。您的问题听起来更像是应该使用基于规则的系统解决的问题之一。我的第一直觉是尝试理解规则并将它们放入导致分类的代码中。

然而,有一些方法可以基于逻辑来学习这种基于规则的系统。对于今天的机器学习来说,它们只是非常过时。https://en.wikipedia.org/wiki/Rule-based_system

根据上述评论,我建议您尝试基于规则的方法。对于您拥有的每台服务器,查询其服务。如果服务器上的所有服务都关闭了,那么您就遇到了服务器问题。对于每个服务,如果没有服务器报告该服务正在运行,那么您的服务就有问题。如果两者都是,您将收到每个通知,然后能够检查任何成分的情况。

使用 ANN 模型的成本、维护和不良结果的风险都超过了简单的、基于规则的解决方案,你的老板可能会拍拍你的后背,因为你只是做了有意义的事情。

如果您真的很想保持服务器和流程的正常运行,我建议您投资 APM 服务,该服务可为您提供有关生产环境中发生的事情的可靠、实时的通知。

如果您只是想了解 ANN 的工作原理,请尝试不同的问题。任何用于分类或异常检测的知名数据集都将为您提供比自定义数据集更深入的了解 ANN 工作原理,而自定义数据集很难强制转换为有效的学习方案。