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 UP
ou DOWN
. Les deux n
et x
sont 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?
la source
Réponses:
À 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
la source
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.
la source