Red neuronal para monitoreo de servidores

11

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 UPo DOWN. Ambos ny xson 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?

Matt Williamson
fuente
¿Por qué no son apropiados otros métodos de clasificación aquí? Parece que le preocupan los casos múltiples que conducen a un conjunto reducido de resultados. Pero esto es básicamente cada caso de aprendizaje de representación en clasificación. Las redes neuronales lo ayudarán a resolver qué efectos de interacción son predictivos cuando las características básicas no son demasiado predictivas. De lo contrario, podría usar otros métodos.
cwharland
Agradezco cualquier solución. La red neuronal era justo la que intentaba utilizar.
Matt Williamson
Interesante problema Desde que publicó esto hace más de 6 meses, ¿puedo hacer que confirme que todavía está interesado en esto antes de pasar tiempo apuñalándolo?
Hack-R
Mi pensamiento inicial sería utilizar un bosque aleatorio de regresión logística en modelos por servidor. Luego tienes tus puntos de referencia y descubrirás bastante rápido si una red neuronal te dará más. Las redes neuronales no siempre dan los mejores resultados.
user1269942

Respuestas:

2

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

Tobias Würfl
fuente
+1, si puede mapear fácilmente si / thens para abordar un problema, no hay forma de que ANN supere a la lógica inferencial pura. Incluso un argumento estadístico (el servicio A está inactivo en 5/6 servidores, por lo tanto, el servicio A está inactivo) es mejor que lidiar con la sobrecarga que requiere una red neuronal.
Derek Janni
2

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.

Derek Janni
fuente