Rete neurale per il monitoraggio del server


11

Sto esaminando Pybrain per aver preso gli allarmi di monitoraggio del server e per determinare la causa principale di un problema. Sono contento di allenarlo utilizzando l'apprendimento supervisionato e curando i set di dati di allenamento. I dati sono strutturati in questo modo:

  • Server Tipo A # 1
    • Tipo di allarme 1
    • Tipo di allarme 2
  • Server Tipo A # 2
    • Tipo di allarme 1
    • Tipo di allarme 2
  • Tipo server B # 1
    • Tipo di allarme 99
    • Tipo di allarme 2

Quindi ci sono n server, con x allarmi che possono essere UPo DOWN. Entrambi ne xsono variabili.

Se il Server A1 ha gli allarmi 1 e 2 come DOWN, allora possiamo dire che il servizio a è inattivo su quel server ed è la causa del problema.

Se l' allarme 1 è inattivo su tutti i server, allora possiamo dire che il servizio a è la causa.

Potrebbero esserci più opzioni per la causa, quindi la classificazione semplice non sembra appropriata.

Vorrei anche collegare le fonti di dati successive alla rete. Come solo script che eseguono il ping di alcuni servizi esterni.

Tutti gli allarmi appropriati potrebbero non essere attivati ​​contemporaneamente, a causa dei controlli del servizio seriale, quindi può iniziare con un server inattivo e un altro server inattivo 5 minuti dopo.

Sto provando a fare alcune cose di base all'inizio:

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

Ma [faccio fatica a mappare numeri variabili di allarmi su numeri statici di ingressi. Ad esempio, se aggiungiamo un allarme a un server o aggiungiamo un server, l'intera rete deve essere ricostruita. Se è qualcosa che deve essere fatto, posso farlo, ma voglio sapere se esiste un modo migliore.

Un'altra opzione che sto cercando di pensare è quella di avere una rete diversa per ogni tipo di server, ma non vedo come posso trarre una conclusione a livello di ambiente, dal momento che farà solo valutazioni su un singolo host, invece di tutti gli host contemporaneamente.

Quale tipo di algoritmo dovrei usare e come posso mappare il set di dati per trarre conclusioni globali sull'ambiente con input variabili?


Perché qui non sono appropriati altri metodi di classificazione? Sembra che ti preoccupi di più casi che portano a una serie ridotta di uscite. Ma questo è fondamentalmente ogni caso di apprendimento della rappresentazione in classificazione. Le reti neurali ti aiuteranno a capire quali effetti di interazione sono predittivi quando le funzionalità di base non sono troppo predittive. Altrimenti potresti usare altri metodi.
Cwharland,

Accolgo con favore qualsiasi soluzione. La rete neurale era proprio quella che stavo tentando di utilizzare.
Matt Williamson,

Problema interessante. Da quando l'hai pubblicato più di 6 mesi fa, posso farti confermare che sei ancora interessato a questo prima che io passi il tempo a provarlo?
Hack-R

Il mio pensiero iniziale sarebbe quello di utilizzare una foresta casuale di regressione logistica su modelli di tipo server. Quindi hai i tuoi parametri di riferimento e scoprirai abbastanza rapidamente se una rete neurale ti darà di più. Le reti neurali non danno sempre i migliori risultati.
user1269942

Risposte:


2

Secondo me stai cercando metodi sbagliati per risolvere il tuo problema.

Non hai rigorosamente dati numerici.

L'apprendimento automatico basato su statistiche ha difficoltà molto con tali problemi. Il tuo problema suona più come uno dei problemi che dovrebbero essere risolti con i sistemi basati su regole. Il mio primo istinto sarebbe quello di cercare di capire le regole e metterle nel codice che porta a una classificazione.

Esistono tuttavia metodi per apprendere tali sistemi basati su regole basati sulla logica. Sono solo abbastanza fuori moda per l'apprendimento automatico oggi. https://en.wikipedia.org/wiki/Rule-based_system


+1, Se puoi facilmente mappare se / thens per affrontare un problema, non c'è modo in cui ANN riuscirà a superare la pura logica inferenziale. Anche un argomento statistico (il servizio A è inattivo su server 5/6, quindi il servizio A è inattivo) è meglio che gestire l'overhead richiesto da una rete neurale.
Derek Janni

2

In linea con il commento sopra, ti suggerisco di provare un approccio basato su regole. Per ogni server che hai, richiedi i suoi servizi. Se tutti i servizi sono inattivi su un server, allora hai un problema con il server. Per ogni servizio, se nessun server segnala che il servizio è in esecuzione, allora hai un problema con il servizio. Nel caso in cui sia entrambi, riceverai degli avvisi per ciascuno e poi sarai in grado di ispezionare cosa sta succedendo con uno qualsiasi dei componenti.

Il costo, la manutenzione e il rischio di risultati negativi usando un modello ANN superano tutti la semplice soluzione basata su regole e il tuo capo probabilmente ti accarezzerà sulla schiena per fare semplicemente ciò che ha senso qui.

Se sei davvero serio nel mantenere funzionali i tuoi server e processi, ti suggerisco di investire in un servizio APM che ti dia notifiche affidabili e in tempo reale su ciò che sta accadendo nel tuo ambiente di produzione.

Nel caso in cui stai solo cercando di imparare come funziona ANN - prova un altro problema. Qualsiasi set di dati noto per la classificazione o il rilevamento di anomalie ti fornirà molte più informazioni sul funzionamento di ANN rispetto a un set di dati personalizzato, che può essere terribilmente difficile forzare in uno schema di apprendimento efficace.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.