Нейронная сеть для мониторинга сервера

11

Я смотрю на 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])

Но мне трудно сопоставить переменные числа аварийных сигналов со статическими номерами входов. Например, если мы добавляем сигнал тревоги на сервер или добавляем сервер, вся сеть должна быть перестроена. Если это то, что нужно сделать, я могу это сделать, но хочу знать, есть ли лучший способ.

Еще один вариант, который я пытаюсь придумать, - это иметь различную сеть для каждого типа сервера, но я не понимаю, как можно сделать вывод для всей среды, поскольку он будет просто оценивать один хост вместо все хосты одновременно.

Какой тип алгоритма мне следует использовать и как мне сопоставить набор данных, чтобы сделать выводы для всей среды с переменными входными данными?

Мэтт Уильямсон
источник
Почему здесь не подходят другие методы классификации? Похоже, вы обеспокоены множеством случаев, приводящих к сокращенному набору результатов. Но это в основном каждый случай репрезентативного обучения в классификации. Нейронные сети помогут вам разобраться, какие эффекты взаимодействия являются прогнозирующими, если базовые функции не слишком прогнозирующие. В противном случае вы можете использовать другие методы.
cwharland
Я приветствую любое решение. Нейронная сеть была только той, которую я пытался использовать.
Мэтт Уильямсон
Интересная проблема. Поскольку вы опубликовали это более 6 месяцев назад, могу ли я убедить вас, что вы все еще заинтересованы в этом, прежде чем я потрачу на это время?
Hack-R
Моей первоначальной мыслью было бы использовать случайный лес логистической регрессии в моделях для каждого типа сервера. Тогда у вас есть свои тесты, и вы довольно быстро узнаете, даст ли вам нейронная сеть больше. Нейронные сети не всегда дают лучшие результаты.
user1269942

Ответы:

2

На мой взгляд, вы ищете неправильные методы для решения вашей проблемы.

У вас строго нет числовых данных.

Статистическому машинному обучению очень тяжело с такими проблемами. Ваша проблема звучит больше как одна из проблем, которые должны быть решены с помощью систем на основе правил. Моим первым инстинктом было бы попытаться понять правила и поместить их в код, ведущий к классификации.

Однако существуют методы для изучения таких систем, основанных на правилах, основанных на логике. Они только немодны для машинного обучения сегодня. https://en.wikipedia.org/wiki/Rule-based_system

Тобиас Вюрфль
источник
+1, если вы можете легко наметить, если / затем решит проблему, нет никакого способа, которым ANN превзойдет чистую логическую вывод. Даже статистический аргумент (служба A отключена на 5/6 серверах, следовательно, служба A отключена) лучше, чем работа с накладными расходами, необходимыми нейронной сети.
Дерек Янни,
2

В соответствии с приведенным выше комментарием, я предлагаю вам попробовать подход, основанный на правилах. Для каждого вашего сервера запросите его услуги. Если все службы не работают на сервере, значит, у вас проблема с сервером. Для каждого сервиса, если ни один сервер не сообщает о том, что сервис запущен, у вас есть проблема с сервисом. В случае, если это и то и другое, вы получите уведомления для каждого, а затем сможете проверить, что происходит с любым из компонентов.

Стоимость, обслуживание и риск плохих результатов при использовании модели ANN превосходят простое решение на основе правил, и ваш начальник, вероятно, похлопает вас по спине за то, что вы здесь делаете то, что имеет смысл.

Если вы действительно серьезно относитесь к сохранению работоспособности своих серверов и процессов, я предлагаю вам инвестировать в службу APM, которая дает вам надежные уведомления в реальном времени о том, что происходит в вашей производственной среде.

В случае, если вы просто пытаетесь узнать, как работает ANN - попробуйте другую проблему. Любой известный набор данных для классификации или обнаружения аномалий даст вам гораздо больше понимания того, как работает ANN, чем пользовательский набор данных, который может быть ужасно трудно привести к эффективной схеме обучения.

Дерек Джанни
источник