7.2. Match disponibili

7.2.1. Attributes

7.2.1.1. Premessa: struttura degli allarmi in memoria

Gli allarmi gestiti da entables sono memorizzati utilizzando una struttura a dizionario chiave/valore.

NOTA: La struttura completa di un allarme puo' cambiare nel tempo.

Esempio:

{
        'condition': {
                'classification': '',
                'expr': u"int(readFile('/tmp/prova.txt'))==1",
                'maxtries': 3,
                'name': 'c',
                'path': 'n1;;dg;c',
                'priority': 31,
                'priority_level': 'medium',
                'statuslastchange': 1414161050,
                'uuid': 'cb90f8d535ff4d9fbd149dae2908db1a'
        },
        'datasources': [],
}

Per identificare una particolare chiave/sottochiave si utilizza il path. Il path e' una stringa che codifica il livello di annidamento della chiave, ed ha la seguente sintassi:

<key1>:<sub-key>:<sub-key>:......

Esempi di path e valori individuati:

condition:maxtries          ---> 3
condition:statuslastchange  ---> 1414161050

7.2.1.2. Utilizzo del match

Il match attributes permette di fare match sui valori associati ad una qualunque delle chiavi del pacchetto dati dell'allarme.

Gli parametri del match vengono specificati con la sintassi:

-m attr --attr_field_name <path>  --attr_field_value <valore>

I parametri sono:

Parametro

Descrizione

attr_field_name

Stringa che codifica il path di una chiave nel messaggio.

attr_field_value

Valore della chiave specificata da attr_field_name

attr_field_value_between

Stringa che specifica i valori min e max (separati da spazio) ammessi per il valore della chiave attr_field_name

Esempi: Questi sono possibili utilizzi del parametro field_name e field_name:

--attr_field_name "condition:maxtries"            --attr_field_value  3        --> MATCH
--attr_field_name "condition:statuslastchange"    --attr_field_value  234234   --> NO MATCH

7.2.1.2.1. Uso di shortcut generici

Un allarme di sanet ha una struttura complessa che puo' anche variare nel tempo.

Per facilitare il match su alcune chiavi importanti dell'allarme, sono disponibili dei parametri shortcut che permettono di semplificare la scrittura del match.

Quando si usa uno shortcut bisogna usare la seguente sintassi:

--attr_<nome shortcut>  <valore>

Esempio: Stesso match usando o meno lo shortcut path :

NORMALE    --attr_field_name  condition:path  --attr_field_value  'localhost;;icmp-reachability;reach'

SHORTCUT   --attr_path                                            'localhost;;icmp-reachability;reach'

Warning

non e' possibile usare alcune opzioni di match (es: attr_field_between) quando si usano gli shortcut

7.2.1.2.2. Specificare valori usando regular expression

Per alcune chiavi (e corrispondendi shortcut) del messaggio e' possibile specificare un valore attraverso espressioni regolari.

Esempio:

--attr_field_name  condition:path  --attr_field_value   '^sw.*'     \__ equivalneti
--attr_path                                             '^sw.*'     /

7.2.1.2.3. Tabella riassuntiva degli shortcut disponiboli

shortcut

Accetta RegExp

Descrizione

Reale path del campo nel messaggio

alarmtype

Stringa con il tipo di allarme. "normal" generati da Sanet, "pushed" generati da push_alarm

alarmtype

path

si

Stringa con il path della condition che ha generato l'allarme

condition:path

name

si

Nome dell'elemento (nome nodo, nome interfaccia, ecc...)

element:name

status

Stato corrente della condition "UP", "DN", "FA"

result:status

priority

Priorita della condition. Valori ammessi: none, 1...99

condition:priority

min_priority

Priorita' minima della condition (in numero o livello di priorita') (es. 10, 'low', ecc. )

condition:priority

priority_level

Livello di priorita della condition (es. "critical")

condition:priority_level

mail_to

Destinario email dell'allarme (Attributi "email" e/o "upemail" della condition dell'allarme)

mail:to

mail_subject

Soggetto email dell'allarme (Attributi "msg_upsubj" o "msg_downsubj" della condition dell'allarme)

mail:subject

mail_body

Corpo email dell'allarme (Attributi "msg_upbody" o "msg_downbody" della condition dell'allarme)

mail:body

7.2.1.3. Vari esempi di utilizzo

entables -t notify -A DEFAULT -m attr --attr_priority                                                       1       -j SMTP

entables -t notify -A DEFAULT -m attr --attr_priority                                                       none    -j SYSLOG --syslog_msg "ERRORE"

entables -t notify -A DEFAULT -m attr --attr_min_priority                                                   88      -j SMTP

entables -t notify -A DEFAULT -m attr --attr_min_priority                                                   low     -j SMTP

entables -t notify -A DEFAULT -m attr --attr_priority_level                                                 medium  -j DROP

entables -t notify -A DEAFULT -m attr --attr_field_name        condition:priority  --attr_field_value_range "42 51" -j DROP 


entables -t notify -A DEAFULT -m attr --attr_field_name        condition:priority  --attr_field_value_range "42 51" -j DROP 

7.2.1.3.1. Campi/shortcut per i messaggi digest

shortcut

Accetta RegExp

Descrizione

Reale path del campo nel messaggio

digest_downs

Numero di condition down pendenti nel digest.

digestinfo:downs

isdigest

Se l'allarme e' un digest o meno (1 digest, 0 normale)

isdigest

Esempi:

entables -t notify -A DEAFULT -m attr --attr_field_name        digestinfo:downs   --attr_field_value        0       -j DROP \_ equivalenti
entables -t notify -A DEAFULT -m attr --attr_digest_downs                                                   0       -j DROP /

7.2.1.3.2. Campi/shortcut per gestire la maintenance

shortcut

Accetta RegExp

Descrizione

Reale path del campo nel messaggio

under_maintenance

Flag "1" o "0" per indicare se l'allarme e' associato ad un oggetto "under maintenance"

event:under_maintenance

Esempi per gestire gli allarmi in manutenzione:

entables -t notify -F DEFAULT
entables -t notify -A DEFAULT -m attr --attr_under_maintenance 1                                      -j SYSLOG --syslog_msg "EVENTO SOTTO MANUTENZIONE"
entables -t notify -A DEFAULT -m attr --attr_under_maintenance 0                                      -j SYSLOG --syslog_msg "EVENTO NON IN MANUTENZIONE"

oppure

entables -t notify -A DEFAULT -m attr --attr_field_name event:under_maintenance --attr_field_value 1  -j SYSLOG --syslog_msg "EVENTO SOTTO MANUTENZIONE"
entables -t notify -A DEFAULT -m attr --attr_field_name event:under_maintenance --attr_field_value 0  -j SYSLOG --syslog_msg "EVENTO NON IN MANUTENZIONE"

7.2.1.3.3. Campi/shortcut per gestire il flapping

shortcut

Accetta RegExp

Descrizione

Reale path del campo nel messaggio

isflapping

Flag "1" o "true" o "0" o "false" per indicare se l'allarme e' in "flapping"

condition:flap_isflapping

Esempi:

# Se l'allarme e' in flapping, aggiungere il prefisso "[FLAPPING]" nel subject
entables -t notify -A DEFAULT -m attr --attr_isflapping true -j SETATTR --setattr_field_name mail.subject --setattr_value '[FLAPPING] {{mail.subject}}'
# se l'allarme e' in stato flapping, droppiamo
entables -t notify -A DEAFULT -m attr --attr_isflapping true   -j DROP       
# se l'allarme non sta flappando, allora continiuamo
entables -t notify -A DEAFULT -m attr --attr_isflapping 0      -j CONTINUE    

7.2.2. Times

Questo match permette di fare match sull'orario di generazione dell'evento che ha prodotto l'allarme.

Gli attributi su cui fare match vengono specificati con la sintassi:

-m times --times_<attributo> <valore>

Gli attributi su cui e' possibile fare match sono:

Parametro

Type

Default

Descrizione

from

stringa

Data di inizio intervallo temporale di interesse (ISO)

to

numero

Data di fine intervallo temporale di interesse (ISO)

range

stringa

Stringa range temporali (ore del giorno/giorni della settimana) di interesse (es: 8-20/1-3)

7.2.2.1. Formato parametri "from e "to"

Il formato delle date ISO puo' essere "YYYY-MM-DD", "YYYY-MM-DD HH:MM" o "YYYY-MM-DD HH:MM:SS".

7.2.2.2. Formato parametro range

La stringa per specificare il range temporale di interesse deve rispettare la sintassi per i range temporali usata: Range temporali.

Esempi:

Stringa

Descrizione

all

Tutti i giorni

none

Tutti i giorni

7-20/1

Tutti i lunedi, tra le 7:00 e le 20:00

8:00-13:00,14:00-18:00/1-5

Tutti i giorni da lunedi (1) a venerdi (5), tral le 8:00 e le 13:00 e tra le 14:00 e le 18:00.

7.2.2.3. Match inverso

E' possibile aggiungere il carattere ! come prefisso al valore del range per indicare che si vuole fare match sul range temporale inverso.

Warning

l'utilizzo del carattere ! produce l'inverso di tutto il range temporale specificato.

Esempi:

!all                    not (tutti i giorni) -> nessun giorno
!none                   not (tutti i giorni) -> nessun giorno    
!8:00-18:00/1-5         not (8:00-18:00/1-5) -> dal 1 al 5 dalle 00:00 alle 8:00 e dalle 18:00 alle 24 + tutto sabato e domenica

Danger

il carattere (!) e' un carattere speciale di alcune shell. Per assicurarsi che non dia errori di interpretazione specificare sempre tutto il range temporale tra apici singoli (').

"!8:00-18:00/1-5"       NO

'!8:00-18:00/1-5'       SI

7.2.2.4. Esempio 1

Matcha tutti i messaggi generati dopo il "2022-01-01 00:00:00"

entables  -A DEFAULT  -m times --times_from '2022-01-01 00:00:00'  -j .....

7.2.2.5. Esempio 2

Matcha tutti i messaggi nella fascia oraria dalle 8:00 alle 18:00 dal lunedi' al venerdi':

entables  -A DEFAULT  -m times --times_range  '8:00-18:00/1-5'  -j .....

7.2.2.6. Esempio 3

Matcha tutti i messaggi FUORI (negato) dalla fascia oraria dalle 8:00 alle 18:00 dal lunedi' al venerdi':

entables  -A DEFAULT  -m times --times_range  '!8:00-18:00/1-5'  -j .....

7.2.3. TAGS

Questo match permette di fare match sui tag associati all'elemento (nodo,interfaccia,ecc.) che ha generato l'allarme.

Gli attributi su cui fare match vengono specificati con la sintassi:

-m tags --tags_<parametro> <valore>

I parametri base su cui e' possibile fare match sono:

Parametro

Descrizione

path

Regexpr per fare match sui tag associati all'allarme

I parametri relativi ai main element (vedi anche Definire elementi principali o main element):

Parametro

Descrizione

main_element_status

Stato del "main element" di uno qualunque dei tag a cui l'allarme e' associato. (UP, FA, DN, ecc.)

main_element_tree

Specifica quale tree considerare per il parametro "main_element_status"

main_element_match

Speficica quanti "main element" di un tag devono fare match. Il valore "any" indica "almeno uno", il valore "all" indica "tutti". Default: "all".

7.2.3.1. Parameter "path"

NOTA: Il path in formato stringa di un tag contiene anche il nome del tagtree. Esempio:

geo:/Visione Globale
geo:/Visione Globale/Pontecchio

servizi:/Servizi IT/Web
servizi:/Servizi IT/Posta

7.2.3.1.1. Match inverso

E' possibile invertire l'esito del match aggiungendo il carattere '!' come prefisso davanti al valore del parametro path o main_element_status:

Esempio:

--tags_path                '!geo:/Visione Globale/Pontecchio'

--tags_main_element_status '!UP' 

--tags_path                '!^allarmi:/Allarmi/Tutti$'           NOTA: attenzione che '!' e' fuori dall'espressione regolare!

7.2.3.1.2. Esempi

Esempio di match su un tag preciso:

entables -t notify -A DEFAULT -m tags --tags_path '^allarmi:/Allarmi/Tutti$' -j DROP SMTP

7.2.3.2. Parameter "main_element_status", "main_element_tree", "main_element_match"

Il parametro "main_element_status" indica quale stato deve avere il/i "main element" di uno dei tag associati all'allarme.

Lo stato e' espresso con il codice dello stato: "UP", "DN", "FA", ecc.

Se il parametro "main_element_tree" e' valorizzato, viene controllato solo il "main element" del tagtree specificato, altrimenti vengono considerati tutti i main-element dei tag dove e' presente il nodo.

Il parametro "main_element_match" indica il numero di "main element" che devono soddisfare la condizione:

  • any: almeno un main element verifica lo stato indicato

  • all: tutti i main element devono soddisfare lo stato indicato

Warning

questo match non discrimina il tipo di allarme a cui viene applicato (se di UP o di DOWN). Assicuratevi che l'intera regola in cui compare questo match si applichi correttamente al tipo di allarme desiderato.

7.2.3.2.1. Esempio

Data questa configurazione, gli allarmi generati dal nodo "pontremon" hanno come "main-element":

  • "piccolo" (tree sedi)

  • "smpt1" (tree servizi)

Esempio:

tagtree sedi
    tag sedi

        tag bologna
            ///
        exit

        tag casalecchio
            tag server
               node pontremon
               exit

               node smpt1
               exit
            exit

            node piccolo
            exit

            main-element node piccolo
        exit
    exit
exit

tagtree servizi
    tag servizi
        tag posta
            node smtp1
            exit

            node piccolo
            exit

            node pontremon
            exit

            main-element node smtp1
        exit
    exit
exit

Questa e' la configurazione di entables

entables -t notify -A DEFAULT -m tags --tags_main_element_status DN  -j DROP

entables -t notify -A DEFAULT -m tags --tags_main_element_status DN --tags_main_element_tree geo -j DROP

7.2.4. tests

NOTA BENE: questo match non va utilizzato. E' disponibile solo per test di debug.

Gli attributi su cui fare match vengono specificati con la sintassi:

-m tests --tests_<attributo> <valore>

Gli attributi su cui e' possibile fare match sono:

Parametro

Type

Default

Descrizione

newerthan

numero

Fa match se il timestamp dell'allarme risale a meno di <num> secondi fa'

7.2.4.1. Esempi

Cattura tutti gli allarmi generati negli ultimo 20 secondi e li ferma per 30 secondi:

entables  -A DEFAULT  -m tests --tests_newerthan 20   -j DELAY --delay_seconds 30

7.2.5. COUNTERS

Questo match permette di accedere alle informazioni memorizzate dal target UPDATECOUNTERS.

-m counters --counters_<parametro> <valore>

Questi sono i parametri su cui e' possibile fare match:

Parametro

Type

Default

Descrizione

status

str

stato della condition dell'ultimo allarme processato da UPDATECOUNTERS

7.2.5.1. Esempi

Manda all'allarme per email solo se l'ultimo allarme processato da UPDATECOUNTERS era un UP.

...
...
entables -t notify -A DEFAULT                                        -J UPDATECOUNTERS 
...
...
entabels -t notify -A DEFAULT    -m counters --counters_status UP    -j SMTP