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