Réseau neuronal pour la surveillance des serveurs

11

Je regarde pybrain pour prendre les alarmes du moniteur de serveur et déterminer la cause première d'un problème. Je suis heureux de le former à l'aide d'un apprentissage supervisé et de gérer les ensembles de données de formation. Les données sont structurées quelque chose comme ceci:

  • Type de serveur A # 1
    • Type d'alarme 1
    • Type d'alarme 2
  • Type de serveur A # 2
    • Type d'alarme 1
    • Type d'alarme 2
  • Type de serveur B # 1
    • Type d'alarme 99
    • Type d'alarme 2

Il y a donc n serveurs, avec x alarmes qui peuvent être UPou DOWN. Les deux net xsont variables.

Si le serveur A1 a alarme 1 et 2 comme DOWN, nous pouvons dire que le service un est en panne sur ce serveur et est la cause du problème.

Si l' alarme 1 est en panne sur tous les serveurs, nous pouvons dire que le service a en est la cause.

Il peut y avoir plusieurs options pour la cause, donc une classification simple ne semble pas appropriée.

Je voudrais également associer des sources de données ultérieures au réseau. Tels que des scripts qui exécutent un ping sur un service externe.

Toutes les alarmes appropriées peuvent ne pas être déclenchées à la fois, en raison de vérifications de service série, de sorte qu'il peut démarrer avec un serveur arrêté puis un autre serveur arrêté 5 minutes plus tard.

J'essaie de faire des trucs de base au début:

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])

Mais j'ai du mal à mapper des nombres variables d'alarmes à des nombres statiques d'entrées. Par exemple, si nous ajoutons une alarme à un serveur, ou ajoutons un serveur, le réseau entier doit être reconstruit. Si c'est quelque chose qui doit être fait, je peux le faire, mais je veux savoir s'il y a une meilleure façon.

Une autre option à laquelle j'essaie de penser est d'avoir un réseau différent pour chaque type de serveur, mais je ne vois pas comment tirer une conclusion à l'échelle de l'environnement, car il ne fera que des évaluations sur un seul hôte, au lieu de tous les hôtes à la fois.

Quel type d'algorithme dois-je utiliser et comment mapper l'ensemble de données pour tirer des conclusions à l'échelle de l'environnement dans son ensemble avec des entrées variables?

Matt Williamson
la source
Pourquoi les autres méthodes de classification ne sont-elles pas appropriées ici? On dirait que vous êtes concerné par plusieurs cas conduisant à un ensemble réduit de sorties. Mais il s'agit essentiellement de tous les cas d'apprentissage de la représentation en classification. Les réseaux neuronaux vous aideront à déterminer quels effets d'interaction sont prédictifs lorsque les caractéristiques de base ne le sont pas trop. Sinon, vous pourriez utiliser d'autres méthodes.
cwharland
Je salue toute solution. Le réseau neuronal était juste celui que j'essayais d'utiliser.
Matt Williamson,
Problème intéressant. Depuis que vous avez posté cela il y a plus de 6 mois, puis-je vous demander de confirmer que vous êtes toujours intéressé par cela avant de passer du temps à essayer?
Hack-R
Ma pensée initiale serait d'utiliser une forêt aléatoire de régression logistique sur des modèles de type par serveur. Ensuite, vous avez vos repères et vous découvrirez assez rapidement si un réseau neuronal vous en donnera plus. Les réseaux de neurones ne donnent pas toujours les meilleurs résultats.
user1269942

Réponses:

2

À mon avis, vous cherchez les mauvaises méthodes pour résoudre votre problème.

Vous n'avez strictement aucune donnée numérique.

L'apprentissage automatique basé sur des statistiques a beaucoup de mal avec de tels problèmes. Votre problème ressemble plus à l'un des problèmes qui devraient être résolus avec les systèmes basés sur des règles. Mon premier réflexe serait d'essayer de comprendre les règles et de les mettre en code menant à une classification.

Il existe cependant des méthodes d'apprentissage de tels systèmes basés sur des règles basées sur la logique. Ils ne sont aujourd'hui tout à fait à la mode pour l'apprentissage automatique. https://en.wikipedia.org/wiki/Rule-based_system

Tobias Würfl
la source
+1, si vous pouvez facilement cartographier si / puis pour résoudre un problème, il n'y a aucun moyen que ANN surpasse la logique inférentielle pure. Même un argument statistique (le service A est en panne sur les serveurs 5/6, donc le service A est en panne) est mieux que de traiter les frais généraux dont un réseau neuronal a besoin.
Derek Janni
2

Conformément au commentaire ci-dessus, je vous suggère d'essayer une approche basée sur des règles. Pour chaque serveur que vous possédez, interrogez ses services. Si tous les services sont en panne sur un serveur, vous avez un problème de serveur. Pour chaque service, si aucun serveur ne signale que le service est en cours d'exécution, vous rencontrez un problème avec le service. Dans le cas où il s'agit des deux, vous obtiendrez des avis pour chacun et pourrez ensuite inspecter ce qui se passe avec l'un des électeurs.

Le coût, la maintenance et le risque de mauvais résultats à l'aide d'un modèle ANN dépassent tous la solution simple basée sur des règles et votre patron vous tapera probablement dans le dos pour avoir simplement fait ce qui a du sens ici.

Si vous voulez vraiment garder vos serveurs et vos processus fonctionnels, je vous suggère d'investir dans un service APM qui vous donne des notifications fiables et en temps réel sur ce qui se passe dans votre environnement de production.

Dans le cas où vous essayez simplement d'apprendre comment fonctionne ANN - essayez un problème différent. Tout ensemble de données bien connu pour la classification ou la détection d'anomalies vous fournira beaucoup plus d'informations sur le fonctionnement d'ANN qu'un ensemble de données personnalisé, qui peut être horriblement difficile à contraindre en un programme d'apprentissage efficace.

Derek Janni
la source