7.2. Match disponibili¶
Contenuti
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