.. _monitoring-nodes: ************************************************************************************************ Monitoraggio dei nodi ************************************************************************************************ Parametri di monitoraggio ======================================================================== Un nodo e' caratterizzato dalle seguenti informazioni: +-------------+--------------------------------------------------------------+ | Dato | Descrizione | +=============+==============================================================+ | description | Descrizione dell'elemento | +-------------+--------------------------------------------------------------+ | switch | (flag si/no) indica se il nodo ha funzionalita' di switching | +-------------+--------------------------------------------------------------+ | router | (flag si/no) indica se il nodo ha funzionalita' di routing | +-------------+--------------------------------------------------------------+ | icon | icona usata dall'interfaccia web | +-------------+--------------------------------------------------------------+ Esistono altri attributi per il momento secondari: +------------------+--------------------+-------------------------------------------------------------------------------------------------------------------------------------------+ | Dato | Default | Descrizione | +==================+====================+===========================================================================================================================================+ | priorita' | | Priorita' di default delle condition associate (se non specificato diversamente) | +------------------+--------------------+-------------------------------------------------------------------------------------------------------------------------------------------+ | flag ipv4/ipv6 | false | Flag *vero*/*falso* per indicare se utilizzare protocollo IPv6 come protocollo di rete di default per questo nodo (default IPv4) | +------------------+--------------------+-------------------------------------------------------------------------------------------------------------------------------------------+ | Nome Dns | | (facoltativo) Nome Dns da utilizzare se diverso dal nome associato al nodo | +------------------+--------------------+-------------------------------------------------------------------------------------------------------------------------------------------+ | Nome DNS ipv6 | | (facoltativo) Nome Dns da utilizzare se diverso dal nome associato al nodo | +------------------+--------------------+-------------------------------------------------------------------------------------------------------------------------------------------+ | IP (v4) | | (facoltativo) Indirizzo IPv4 da utilizzare per il monitoraggio | +------------------+--------------------+-------------------------------------------------------------------------------------------------------------------------------------------+ | IP (v6) | | (facoltativo) Indirizzo Ipv6 da utilizzare per il monitoraggio | +------------------+--------------------+-------------------------------------------------------------------------------------------------------------------------------------------+ | Timezone | | (facoltativo) Timezone associata a questo nodo | +------------------+--------------------+-------------------------------------------------------------------------------------------------------------------------------------------+ | SNMP versione | 1 | Versione del protocollo SNMP. Valori ammessi 1,2,3. Il valore 0 disabilita l'invio di richieste verso SNMP verso il nodo. | +------------------+--------------------+-------------------------------------------------------------------------------------------------------------------------------------------+ | SNMP port | 161 | Porta SNMP (default 161) | +------------------+--------------------+-------------------------------------------------------------------------------------------------------------------------------------------+ | SNMP community | public | Community SNMP | +------------------+--------------------+-------------------------------------------------------------------------------------------------------------------------------------------+ | Default Timeout | 1 | Timeout di default da utilizzare per i controlli associati a questo nodo | +------------------+--------------------+-------------------------------------------------------------------------------------------------------------------------------------------+ | Notify Address | | Indirizzo di notifica utilizzato per segnalare anomalie non gestite (Trap SNMP o altro) | +------------------+--------------------+-------------------------------------------------------------------------------------------------------------------------------------------+ .. | SNMP v3 Auth | | (facoltativo) Dati per l'autenticazione SNMP v3 | +------------------+--------------------+-------------------------------------------------------------------------------------------------------------------------------------------+ Flag switch/router -------------------- I flag *switch* e *router* sono due flag puramente informativi e non influiscono in nessuno modo sul monitoraggio. Nome del nodo e *identificativo effettivo* ------------------------------------------ E' *preferibile* che tutti gli apparati/server monitorati siano registrati/inventariati presso un DNS (anche locale sulla stessa macchina dove e' installato Sanet), ma in certi scenari un nodo potrebbe non essere registrato: - Non si a' controllo del DNS, ma c'e' comunque necessita' di monitorare il nodo. - Il nodo appartiene ad una rete esterna monitorata attraverso un agente remoto - ecc. In fase di monitoraggio bisogna distinguere tra *nome* del nodo e *identificativo effettivo* del nodo: - *nome* e' il nome assegnato in Sanet. - *identificativo effettivo* e' il nome (hostname) o indirizzo IP realmente usato da Sanet per il monitoraggio. L'*identificativo effettivo* viene calcolato in questo modo: - Se il flag IPv4 e' *vero*: - Se l'indirizzo IP e' specificato usa quello - Se il nome DNS e' specificato usa quello - Usa il *nome* del nodo in Sanet (quindi il nome del nodo deve essere risolvibile in IPv4: file hosts o record A) - Se il flag IPv4 e' *falso*: - Se l'indirizzo IPv6 e' specificato usa quello - Se il nome DNSv6 e' specificato usa quello - Usa il *nome* del nodo in Sanet (quindi il nome del nodo deve essere risolvibile in IPv6: file hosts o record AAAA) **IMPORTANTE**: Questa logica altera anche le variabili utilizzabili nelle espressioni di monitoraggio di sanet. Si veda: :ref:`expr-builtin-symbols-node`. Configurazione protocollo SNMP ======================================================================== Configurazione SNMPv3 ------------------------------------------------- .. danger:: a causa di problemi nel pacchetto NET-SNMP ufficiale (binding python) il supporto per il protocollo SNMPv3 e' instabile e puo' causare *crash* (con probabile terminazione) dei processi *agenti* che eseguono operazioni utilizzano il protocollo SNMPv3. Se si ha necessita' di monitorare nodi con SNMPv3 e' consigliabile creare un agente ad-hoc in modo che eventuali *crash* non impattino sul monitoraggio del resto del sistema. Quando si intende monitorare dei nodi attraverso il protocollo SNMPv3 e' necessario configurare il parametro SNMP Community in maniera particolare. La stringa di configurazione deve rispettare una sintassi particolare che serve per specificare tutti i parametri di sicurezza/autenticazione previsti dal SNMPv3. Si rimanda alla sezione: :ref:`snmp-v3-options-string`. .. automodule:: sanet_poller.lib.snmp.base Disabilitare completamente SNMP ------------------------------------------------- La versione SNMP configurata di default e' la 1. In alcuni contesti (interfaccia web, CLI) Sanet utilizza il protocollo SNMP per ottenere *on-demand* informazioni sul nodo o i suoi apparati. Se si desidera disabilitare completamente qualunque uso del protocollo SNMP bisogna impostare a 0 il numero di versione SNMP. Impostare a 0 la versione comporta: * Qualunque dato SNMP richiesta da Sanet avra' valore nullo (*null* o *none*). Questo valore e' diverso da *stringa vuota* (''). * *Datasource* e *Condition* basati su SNMP verranno eseguiti, ma con buona probabilita' termineranno con stato *UNCHECKABLE*. Raggruppamento di nodi in Cluster ======================================================================== Alcuni apparati non possono essere monitorati direttamente (via SNMP o altri protocolli) ma solamente interrogando altri apparati. Lo scenario e' il seguente: - Esiste una serie nodi che vogliamo monitorare ma non interrogabili direttamente. - Esiste una serie di nodi che espongono i dati di monitoraggio - in un dato istante le informazioni di un nodo del primo gruppo sono mantenute da un preciso nodo del secondo gruppo. Questo capita nel caso di: * Access Point con Wireless Controller * Cluster di virtualizzazione con i dati sulle macchine virtuali reperibili interrogando le macchine di virtualizzazione e non le macchine guest. Per gestire in maniera "elastica" questi particolari apparati Sanet supporta quella che abbiamo definito "gestione di cluster di nodi". Un cluster e' un un raggruppamento logico di nodi del monitoraggio identificato da: * nome univoco * dati aggiuntivi I cluster possono essere pensati come insiemi disgiunti di nodi quindi valgono le seguenti regole regole: * Possono essere definiti un numero arbitrario di cluster. * E' possibile associare un nodo ad un solo cluster alla volta. .. digraph:: prova imagepath="/opt/sanet3/static/webui/images/resources/"; subgraph cluster1 { label="cluster 1"; wc1 -> ap1; wc1 -> ap2; wc1 -> ap3; } subgraph cluster2 { label="cluster 2"; wc2 -> ap4; wc2 -> ap5; } wc2 -> ap3 [color = red, label = "no"]; Ruoli e associazione in un cluster ----------------------------------- All'interno di un cluster le entita' possono essere di due tipi: * MASTER : sono le entita' logicamente principali o piu' importanti. Espongono le informazioni di monitoraggio degli altri nodi del cluster (DEPENDENT). * DEPENDENT: entita' logicamente dipendenti dalle entita' MASTER. Alcuni esempi: * Wireless Controller e Access Point * Controller e' un MASTER * Access Point e' un DEPENDENT * Cluster VMWare * Le macchine host (o hypervisor) sono MASTER * Le macchine guest sono DEPENDENT Quando un MASTER esponde le informazioni di un DEPENDENT, si dice che il DEPENDENT e' *associato* al MASTER. .. warning:: Tutti i nodi raggruppati in un cluster (MASTER e DEPENDENT) devono essere monitorati (assegnati) dallo stesso agente. E' da tenere presente questo vincolo quando si deve scegliere quali agenti definit/utilizzare e quali gruppi di nodi monitorare con lo stesso agente. Configurazione nodi DEPENDENT ----------------------------- Ogni nodo DEPENDENT del cluster deve essere configurato in maniera tale che Sanet sappia come verificare se esiste un'associazione tra il nodo stesso e uno dei MASTER del cluster. Per fare questo e' necessario parametrizzare correttamente i seguenti campi del nodo: * cluster-distinguisher Questo campo serve per memorizzare una stringa da utilizzare per identificare univocamente il nodo all'interno del cluster. NOTA: il valore di questo campo e' arbitrario. Nel caso di access point di solito e' frequente pensare al MAC address come un buon candidato ad essere usato come cluster_distinguisher. Quando questo campo e' valorizzato, Sanet permette di richiamarne il valore in qualunque espressione attraverso la variabile $cluster_distinguisher. * cluster-xform Questo campo deve contenere l'espressione che SANET valutera' per controllare se il nodo e' associato ad uno dei nodi del cluster. La variabile $cluster_distinguisher dovrebbe essere utilizzata all'interno dell'espressione (ma non e' obbligatorio). L'espressione cluster-xform viene eseguita su ogni nodo MASTER del cluster. Se la valutazione restituisce un risultato l'associazione con il nodo del cluster e' verificata. Il risultato calcolato viene chiamato cluster-instance e puo' essere usato successivamente per trovare le informazioni del nodo sul MASTER che ha verificato l'associazione. Esempio: :: cluster-distinguisher -> 00260BAC5E60 cluster-xform -> byBinaryValue( 1.3.6.1.4.1.14179.2.2.1.1.1@ , $cluster_distinguisher ) In questo esempio stiamo indicando di usare la funzione byBinaryValue() per cercare nelle MIB 1.3.6.1.4.1.14179.2.2.1.1.1 di tutti i nodi MASTER del cluster un OID che contenga il valore binario 00260BAC5E60. Se viente trovato l'OID con quel valore, l'associazione e' verificata. Quando viene effettivamente calcolata l'associazione? ------------------------------------------------------- Per motivi di performance la gestione/controller del cluster viene attivata solo se un datagroup utilizza delle espressioni che hanno effettivamente bisogno di dati utilizzando questo meccanismo. Anche se uno nodo e' stato configurato con un certo cluster-distinguisher e cluster-xform, se un datagroup NON utilizza funzioni o variabili che coinvolgono la gestione a cluster, l'associazione non viene controllata!!! Configurazione ======================================================================== * CLI: si rimanda alla sezione: :ref:`cli-config-nodes` * WEB: non ancora disponibile.