Я смотрю на pybrain для получения сигналов тревоги сервера и определения основной причины проблемы. Я доволен обучением, используя контролируемое обучение и обучение наборов данных обучения. Данные структурированы примерно так:
* Server Type **A** #1
* Alarm type 1
* Alarm type 2
* Server Type **A** #2
* Alarm type 1
* Alarm type 2
* Server Type **B** #1
* Alarm type **99**
* Alarm type 2
Таким образом, существует n серверов с x аварийными сигналами, которые могут быть UP
или DOWN
. Оба параметра n
и x
являются переменными.
Если сервер A1 имеет аварийные сигналы 1 и 2 как DOWN
, мы можем сказать, что служба a отключена на этом сервере и является причиной проблемы.
Если на всех серверах отключен аварийный сигнал 1, мы можем сказать, что причиной является a.
Потенциально может быть несколько вариантов причины, поэтому прямая классификация не кажется подходящей.
Я также хотел бы связать более поздние источники данных с сетью. Например, просто скрипты, которые пингоруют некоторую внешнюю службу.
Все соответствующие аварийные сигналы могут не запускаться одновременно, из-за проверки серийных услуг, поэтому он может начинаться с одного сервера вниз, а затем другого сервера через 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])
Но я [m имеет сложное время, отображающее переменные числа аварийных сигналов на статические числа входов. Например, если мы добавляем сигнал тревоги на сервер или добавляем сервер, вся сеть должна быть перестроена. Если это то, что нужно сделать, я могу это сделать, но хочу знать, есть ли лучший способ.
Другая опция, о которой я пытаюсь думать, имеет другую сеть для каждого типа сервера, но я не вижу, как я могу сделать вывод об окружающей среде, поскольку он просто сделает оценки на одном хосте, вместо всех хостов одновременно.
Какой тип алгоритма я должен использовать и как мне сопоставить набор данных для вывода общих для всей среды выводов в целом с переменными входами?
Я очень открыт для любого алгоритма, который будет работать. Go даже лучше, чем python.