Eventi “Push”

Introduzione

Il flusso di monitoraggio e’ diviso in tre fasi:

  • RECEIVE: Raccolta dati dalla rete ( esecuzione di datagroup da parte di agenti)
  • PROCESS: Ricezione ed elaborazione dei dati dal server centrale di sanet
  • NOTIFY: Notifica di allarmi

Attraverso gli eventi/allarmi Push e’ possibile inserirsi in questo flusso utilizzando dati prodotti da applicazioni esterne.

E’ possibile effettuare due tipi di operazioni push, che si differenzioano in base al punto di ingresso nel sistema:

  • Push di eventi
  • Push di allarmi

In questo schema viene riassunto il flusso di:

  • monitoraggio di datagroup normali
  • monitoraggio di trap snmp attraverso datagroup passsivi
  • push di eventi ed elaborazione don datagroup passivi
  • push di allarmi in entables
monitoring/push/../_static/web/images/receive-process-notify-flow.png

Push di eventi

Un evento e’ un insieme di dati in forma chiave/valore che vengono loggati e processati da datagroup passivi.

Quando viene fatto push di un evento, Sanet compie le seguenti operazioni:

  1. L’evento viene storicizzato nel log di sanet come evento CUSTOM.
  2. Sanet cerca di capire se l’evento e’ associabile ad un elemento di monitoraggio.
  3. L’evento viene processato da un datagroup passivo. Le condition di questo datagroup possono produrre o meno allarmi.

Selezione dell’elemento di monitoraggio

In fase di push e’ possibile forzare due valori:

  • indirizzo ip sorgente
  • elemento di monitoraggio associato all’evento.

Se viene specificato solo l’indirizzo IP sorgente, sanet cerca di identificare il nodo di di monitoraggio associato, con un meccanismo identico a quello per gestire le Trap SNMP.

Elaborazione con datagroup passivi: passive match string

Per poter elaborare un evento con un datagroup passivo e’ necessario associare all’evento una stringa di passive match.

Questa stringa viene confrontata con l’attributo passive match di tutti i datagroup associati all’elemento di monitoraggio che sanet ha associato all’evento.

Important

l’attributo passive match di un datagroup puo’ specificare, usando una sintassi particoalre, una regular expression. Si veda il paragrafo Passive match.

Dati dell’evento elaborati dal datagroup passivo

Tutte le tuple chiave/valore associate ad un evento vengono convertite in simboli accessibile nelle espressioni di datasource e condition.

Esempio:

EVENTO                                SIMBOLI ACCESSIBILI NELLE EXPR
{
  data       : "1/1/2015",     ->     $data = "1/1/2015"
  variabile1 : 666             ->     $variabile1 = 666
}

Comando push_event

Per effetuare il push di un evento bisogna usare il comando:

sanet-manage push_event [optioni]

Esempio:

python manage.py push_event -L 10 --element localhost '{ "val": 10 }'

Dati dell’evento

A riga di comando

L’allarme deve essere un dizionario di attributi chiave/valore codificato in formato JSON valido.

Esempio: Dato il seguente allarme:

{
        "campo1": "hello",
        "campo2": "world",
        "campo3": 1234
}

Il comando e’:

sanet-manage push_event --element localhost '{ "campo1" : "hello", "campo2" : "world", "campo3" : 1234 }'
Da standard input
sanet-manage push_event --element localhost --stdin
{ "campo1" : "hello", "campo2" : "world", "campo3" : 1234 }
Ctrl+d
Da environment

Per specificare un attributo dell’allarme da environemnt bisogna definire una variabile d’ambiente con il seguente nome:

EVENT_PUSH_{nome}={valore}
export EVENT_PUSH_campo1=ciao
sanet-manage push_alarm --env --element localhost

L’allarme inviato ad entables sara’:

{
        "campo1" : "ciao"
}

Esempi

Configurazione nodo e datagroup passivo:

datagroup-template dgpassive
    source site
    description ""
    passive-match passivo
    minperiod 0
    title "Datagroup per eventi passivi"
    condition check
        expr "$var == 1"
        max-tries 1
        msg-downbody "Evento passivo down"
        msg-downsubj "[DOWN] Evento passivo"
        msg-upbody "Evento passivo up"
        msg-upsubj "[UP] Evento passivo"
        title "Controllo passivo"
    exit
exit

node localhost

        datagroup dgpassive
        exit
exit

Configurazione entables:

entables -t notify -A DEFAULT -j SMTP --smtp_rcpt_to '${mail_to}' --smtp_message '${mail_body} - ${rawalarm}' --smtp_subject '${mail_subject}'

Push dell’evento:

python manage.py push_event -L 10 '{ "var": 0 }' --sourceip 127.0.0.1 --passive passivo

Mostrare i dati pushed nei messaggi degli allarmi

Quando viene generato un allarme da un evento pushed, e’ possibile inserire i dati pushed all’interno del corpo dei messsaggi UP e DOWN usando le wildcard dinamici (Vedi anche Wildcard dinamici {{ }}).

La sintassi e’ la seguente:

{{ pushed_data.<key>[.<key> ...] }}

Esempio: Se questi sono i dati dell’evento pushed:

{
        "campo1" : "ciao",
        "campo2" : [ 1, 2, 3 ],
        "campo3" : {
                "key1": 666,
                "key2": 777,
        }
}

Questi sono alcuni esempi delle wildcard che e’ possibile usare:

{{ pushed_data.campo1 }}        --> ciao
{{ pushed_data.campo2.1 }}      --> 2
{{ pushed_data.campo3.key2 }}   --> 777

Push di allarmi in entables

Un allarme e’ un insieme di tuple chiave/valore. Questi dati possono essere utilizzati in entables per fare match, espandere stringhe e template nei target, ecc.

Un allarme viene processato da entables cosi’ come viene inserito nel sistema.

IMPORTANTE: Sanet non salva nel log degli eventi questa operazione.

IMPORTANTE: I dati dell’allarme non vengono pre-processati in nessun modo. L’allarme viene processato da entables cosi’ come viene fornito.

Comando push_alarm

Per fare push di un allarme in entables bisogna usare il comando:

sanet-manage push_alarm [opzioni] [ dati allarme in formato JSON ]

Esempio:

sanet-manage push_alarm '{ "dato" : 10 }'

Dati dell’allarme a riga di comando

L’allarme deve essere un dizionario di attributi chiave/valore codificato in formato JSON valido.

Esempio: Dato il seguente allarme:

{
        "campo1": "hello",
        "campo2": "world",
        "campo3": 1234
}

Il comando e’:

sanet-manage push_alarm '{ "campo1" : "hello", "campo2" : "world", "campo3" : 1234 }'

Dati dell’allarme da standard input

sanet-manage push_alarm --stdin
{ "campo1" : "hello", "campo2" : "world", "campo3" : 1234 }
Ctrl+d

Dati dell’allarme da environemnt

Per specificare un attributo dell’allarme da environemnt bisogna definire una variabile d’ambiente con il seguente nome:

EVENT_PUSH_{nome}={valore}
export EVENT_PUSH_campo1=ciao
sanet-manage push_alarm --env

L’allarme inviato ad entables sara’:

{
        "campo1" : "ciao"
}

Campi obbligatori/automatici

Ogni allarme deve avere due attributi obbligatori.

IMPORTANTE: in assenza di questi due attributi, Sanet calcola automaticamente un valore da asseganre ad entrambi.

Attributo Descrizione Default
tenantid UUID del tenant a cui associare l’allarme. (vedi opzione –tenant) UUID del tentant primario
uuid UUID univoco dell’alarme Calcolato nuovo

Esempio 1

Configurazione di entables:

./bin/entables -t notify -A DEFAULT -j SMTP --smtp_rcpt_to 'root' --smtp_message '${rawalarm}' --smtp_subject 'Evento custom'

Push dell’allarme:

sanet-manage push_alarm '{ "val":10 }'

Esempio 2

Invio semplice di allarmi via SMTP:

entables -t notify -F DEFAULT
entables -t notify -A DEFAULT -j SMTP --smtp_rcpt_to '${mail_to}' --smtp_message '${mail_body}' --smtp_xheaders '${mail_xheaders}' --smtp_subject '${mail_subject}'

Push di un evento custom. Il campo “mail” conviene i parametri che entables riconosce ed espande con i tag buitin:

sanet-manage push_alarm -L 10 '{ "mail": { "to":"root", "subject": "evento custom", "body": "corpo" } }'

Oppure:

sanet-manage push_alarm -L 10 --stdin
'{ "mail": { "to":"root", "subject": "evento custom", "body": "corpo" } }'
Ctrl+d

Distinguere gli allarmi pushed in entables

E’ possibile distinguere gli allarmi generati da sanet da quelli pushed attraverso i match disponibili di Entables.

Per dettagli si rimanda alla documentazione di Entables: match Attributes.

Esempio:

entables -t notify -F DEFAULT
entables -t notify -A DEFAULT -m attr --attr_alarmtype "normal"  -j SYSLOG --syslog_msg "normale"
entables -t notify -A DEFAULT -m attr --attr_alarmtype "pushed"  -j SYSLOG --syslog_msg "pushed"