Estoy mirando pybrain para tomar alarmas del monitor del servidor y determinar la causa raíz de un problema. Estoy contento con entrenarlo mediante el aprendizaje supervisado y curar los conjuntos de datos de capacitación. Los datos están estructurados de manera similar a esto:
- Servidor tipo A # 1
- Alarma tipo 1
- Alarma tipo 2
- Servidor tipo A # 2
- Alarma tipo 1
- Alarma tipo 2
- Servidor tipo B # 1
- Tipo de alarma 99
- Alarma tipo 2
Entonces hay n servidores, con x alarmas que pueden ser UP
o DOWN
. Ambos n
y x
son variables.
Si el Servidor A1 tiene la alarma 1 y 2 como DOWN
, entonces podemos decir que el servicio a está inactivo en ese servidor y es la causa del problema.
Si la alarma 1 está inactiva en todos los servidores, entonces podemos decir que el servicio a es la causa.
Potencialmente puede haber múltiples opciones para la causa, por lo que la clasificación directa no parece apropiada.
También me gustaría vincular las fuentes de datos posteriores a la red. Tales como solo scripts que hacen ping a algún servicio externo.
Es posible que no se activen todas las alarmas apropiadas de una vez, debido a las comprobaciones del servicio en serie, por lo que puede comenzar con un servidor inactivo y luego otro servidor inactivo 5 minutos más tarde.
Estoy tratando de hacer algunas cosas básicas al principio:
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])
Pero estoy teniendo dificultades para asignar números variables de alarmas a números estáticos de entradas. Por ejemplo, si agregamos una alarma a un servidor, o agregamos un servidor, toda la red necesita ser reconstruida. Si eso es algo que hay que hacer, puedo hacerlo, pero quiero saber si hay una mejor manera.
Otra opción en la que estoy tratando de pensar es tener una red diferente para cada tipo de servidor, pero no veo cómo puedo sacar una conclusión para todo el entorno, ya que solo realizará evaluaciones en un solo host, en lugar de Todos los anfitriones a la vez.
¿Qué tipo de algoritmo debo usar y cómo mapeo el conjunto de datos para sacar conclusiones de todo el entorno en su conjunto con entradas variables?
fuente
Respuestas:
En mi opinión, está buscando métodos incorrectos para resolver su problema.
No tiene estrictamente datos numéricos.
El aprendizaje automático basado en estadísticas tiene dificultades con tales problemas. Su problema se parece más a uno de los problemas que deben resolverse con sistemas basados en reglas. Mi primer instinto sería tratar de entender las reglas y ponerlas en un código que conduzca a una clasificación.
Sin embargo, existen métodos para aprender tales sistemas basados en reglas basados en la lógica. Hoy en día no están de moda para el aprendizaje automático. https://en.wikipedia.org/wiki/Rule-based_system
fuente
En línea con el comentario anterior, le sugiero que pruebe un enfoque basado en reglas. Para cada servidor que tenga, consulte sus servicios. Si todos los servicios están inactivos en un servidor, entonces tiene un problema con el servidor. Para cada servicio, si ningún servidor informa que el servicio se está ejecutando, entonces tiene un problema con el servicio. En el caso de que sea ambos, recibirá avisos para cada uno y luego podrá inspeccionar lo que está sucediendo con cualquiera de los componentes.
El costo, el mantenimiento y el riesgo de malos resultados con un modelo ANN exceden la solución simple basada en reglas y su jefe probablemente lo felicitará por hacer lo que tiene sentido aquí.
Si realmente quiere mantener en funcionamiento sus servidores y procesos, le sugiero que invierta en un servicio APM que le brinde notificaciones confiables y en tiempo real sobre lo que sucede en su entorno de producción.
En el caso de que solo estés tratando de aprender cómo funciona ANN, prueba un problema diferente. Cualquier conjunto de datos conocido para la clasificación o la detección de anomalías le proporcionará mucha más información sobre cómo funciona ANN que un conjunto de datos personalizado, lo que puede ser terriblemente difícil de forzar en un esquema de aprendizaje efectivo.
fuente