- Progress in Training

Transcript

- Progress in Training
MASTER UNIVERSITARIO DI II LIVELLO IN
“METODOLOGIE E TECNOLOGIE PER LO SVILUPPO DI
INFRASTRUTTURE DIGITALI”
_________________________________________________________________
TESI DI MASTER
Monitoraggio di una infrastruttura IT
mediante il software Zabbix
Relatore:
Prof. Gennaro BOGGIA
Formando:
Francesco UNGOLO
_________________________________________________________________
ANNO ACCADEMICO 2013 – 2014
Ai miei genitori
2
Indice
Introduzione ............................................................................................................................ 5
Capitolo 1: Principi di funzionamento dei server monitorati ……….. 6
1.1
1.2
Virtualizzazione …………………………………………………………. 6
1.1.1
Virtual Machine Monitor ………………………………………..... 6
1.1.2
Tecniche di virtualizzazione ……………………………………… 8
Xen hypervisor …………………………………………………………. 10
1.2.1
Princìpi ispiratori ……………………………………………....... 10
1.2.2
Architettura …………………………………………………….. 11
1.3
Vantaggi offerti dalla virtualizzazione …………………………………... 14
1.4
Software Zabbix ………………………………………………………... 15
1.4.1
Zabbix appliance ………………………………….……………. 15
1.4.2
Funzionamento …………………………………………….….... 16
Capitolo 2: Descrizione dell’infrastruttura IT da monitorare .............. 19
2.1
Struttura della rete da monitorare ………………………………………. 19
2.2
Server LAN …………………………………………………………….. 21
2.3
Server DMZ ……………………………………………………………. 23
3
Capitolo 3: Messa a punto del sistema di monitoring basato sul
software Zabbix ………………………………………………...………………… 25
3.1
Zabbix front-end ……………………………………………………….. 25
3.1.1
Dashboard …………………………………………………….... 25
3.2
Installazione Zabbix agent ……………………………………………… 27
3.3
Configurazione delle azioni ……………………………………………... 28
3.4
3.5
3.6
3.3.1
Auto-discovery …………………………………………………. 28
3.3.2
Notifica degli eventi …………………………………………….. 30
Administration …………………………………………………………. 31
3.4.1
User & User groups ……………………………………………... 31
3.4.2
Media Types ……………………………………………………. 33
Configurazione degli host da monitorare ……………………………….. 34
3.5.1
Host & host groups …………………………………………….. 34
3.5.2
Items …………………………………………………………… 37
3.5.3
Triggers ………………………………………………………… 43
3.5.4
Grafici ………………………………………………………….. 45
Risultati ottenuti ………………………………………………………... 50
3.6.1
Schermate ………………………………………………………. 50
3.6.2
Mappe ………………………………………………………….. 54
3.6.3
Provvedimenti attuati ………………………………………….... 61
Conclusioni e sviluppi futuri ............................................................................................ 63
Bibliografia ................................................................................................................................. 64
Appendice ................................................................................................................................... 65
4
Introduzione
Il monitoraggio è un servizio fondamentale per ottenere un feedback sul funzionamento di
una infrastruttura IT. Attualmente esistono vari software in grado di fare ciò, alcuni
effettuano un puro monitoraggio indicando semplicemente lo stato di una risorsa ed altri si
limitano a fornire esclusivamente misure di performance.
Zabbix è un software open-source che permette il monitoraggio di tutte le risorse di una
infrastruttura IT e della loro integrità, disponibilità e performance. Inoltre Zabbix usa un
meccanismo di notifica flessibile, permettendo agli utenti di configurare segnalazioni tramite
e-mail per qualsiasi evento.
Tutte le informazioni (configurazione, dati) sono memorizzate in un database relazionale che
costituisce un prezioso storico. Zabbix ha potenti funzioni di visualizzazione (mappe,
overview, grafici e dashboard) grazie a cui è possibile valutare quantitativamente le
performance di sistema. Nonostante sia un sistema di monitoraggio centralizzato, è
progettato per scalare fino a reti grandi e complesse grazie alle funzionalità di Distributed
Monitoring. Tutti i report e le statistiche sono accessibili mediante un front-end basato sul
web, questo garantisce che lo stato dell’infrastruttura possa essere valutata da qualsiasi luogo.
Il lavoro di tesi è stato effettuato al Telematics Lab presso il Politecnico di Bari, in
collaborazione con il Dr. Giacomo Demarinis per la configurazione di rete e di sistema, ed
il Dr. Ruggiero Santoro per quanto riguarda il firewalling della rete.
Il monitoraggio da software Zabbix è stato applicato ad una infrastruttura IT consistente in
una rete di server che offre servizi sia ad utenti esterni che interni alla rete stessa. Tutto ciò,
allo scopo di fornire uno strumento potente e flessibile che consenta di tenere costantemente
sotto controllo l’infrastruttura e soprattutto di segnalare in tempo reale guasti o anomalie nel
funzionamento.
Il lavoro di tesi è strutturato in tre capitoli. Nel primo viene illustrato il principio di
funzionamento del software Zabbix e della virtualizzazione. Nel secondo, viene illustrata la
composizione dell’infrastruttura IT indagata e nel terzo si mostra la messa a punto del sistema
di monitoraggio ed i grafici ottenuti.
5
Capitolo 1: Principi di funzionamento dei server
monitorati
1.1
Virtualizzazione
Per virtualizzazione si intende l'astrazione di una risorsa fisica attraverso un'interfaccia logica
che ne nasconda i dettagli implementativi. Nel caso specifico della virtualizzazione di sistemi
informatici, consiste nella predisposizione ed utilizzo di intere macchine virtuali, differenti
per sistema operativo ed applicazioni installate, sul medesimo sistema hardware. La
predisposizione di un tale sistema viene realizzata mediante utilizzo di uno strato software
intermedio detto VMM (Virtual Machine Monitor) che ha l'effetto di controllare e
regolamentare l'accesso delle macchine virtuali alle risorse fisiche della macchina.
Per spiegare al meglio come si svolge tale processo, si è deciso di introdurre alcuni concetti
di macchina virtuale VM e VMM. La prima definizione di VM risale al 1974 quando Gerald
J. Popek e Robert P. Goldberg scrissero un articolo in cui gettarono le basi teoriche della
virtualizzazione. Benché si riferissero a sistemi di terza generazione, costruiti con i primi
circuiti integrati, l'analisi che fecero può essere considerata valida anche per i moderni sistemi
di quarta generazione, dotati di microprocessori. La definizione che fu data di macchina
virtuale è la seguente:
“Un duplicato software di un computer reale nel quale un sottoinsieme statisticamente dominante di istruzioni
del processore virtuale viene eseguito nativamente sul processore fisico” [1].
1.1.1
Virtual Machine Monitor
Virtual Machine Monitor è un software che risiede e viene eseguito su una macchina reale e
che ha il completo controllo delle risorse hardware. Esso definisce, regola e controlla degli
ambienti di esecuzione virtuali (VM) che forniscono agli utenti un accesso diretto ed
esclusivo alle risorse della macchina fisica [2].
6
Popek e Goldberg definiscono un set di condizioni tali che l’architettura di un processore
supporti la virtualizzazione e le generalizzano per il VMM, che deve quindi soddisfare per
provvedere alla corretta astrazione delle macchine virtuali. Queste condizioni, o proprietà,
sono:
1. Equivalenza: un programma in esecuzione su un VMM deve avere lo stesso
comportamento dimostrato durante l’esecuzione diretta sullo strato hardware
sottostante. Tale proprietà a volte è anche chiamata fedeltà;
2. Controllo delle risorse: il VMM deve avere il completo controllo delle risorse
hardware virtualizzate, usate dai sistemi operativi ospiti;
3. Efficienza: tale proprietà permette l’esecuzione della maggior parte delle istruzioni
senza l’intervento del VMM [1].
Si possono individuare due tipologie di VMM, in base alla collocazione nell'ambiente della
macchina fisica:
• Il VMM di tipo 1 è posto immediatamente sopra l'hardware ed dispone di tutti i
meccanismi di un normale kernel o sistema operativo in quanto a gestione delle
memoria, delle periferiche e del processore; in più implementa i meccanismi di
gestione delle macchine virtuali. Le macchine virtuali eseguite al di sopra del VMM
dispongono di un proprio sistema operativo e sono dette macchine “guest".
Fig. 1.1.1.1: rappresentazione a blocchi di un VMM di tipo 1
• Il VMM di tipo 2 è un normale processo in esecuzione nell'ambito di un sistema
operativo detto “host". Gestisce direttamente le macchine virtuali, che sono suoi
sottoprocessi, mentre la gestione dell'hardware è demandata al sistema ospitante.
7
Fig. 1.1.1.2: rappresentazione a blocchi di un VMM di tipo 2
1.1.2 Tecniche di virtualizzazione
Esistono molteplici tipologie di virtualizzazione di sistemi quali:

La virtualizzazione completa (Full-virtualization) consiste nella completa simulazione
software delle risorse hardware. Per far questo, ogni istruzione eseguita dalle VM
deve essere intercettata e, se è sensibile (istruzione che modifica lo stato delle risorse
del sistema), tradotta a runtime per mezzo di meccanismi software detti “binarytranslation". Il VMM è tipicamente di tipo 2, ovvero un processo eseguito all'interno
dell'ambiente del sistema operativo host. Il SO non sa di essere virtualizzato, per tale
motivo vi è dell’overhead, soprattutto se vi è un largo uso di I/O.

La Paravirtualizzazione (Para-virtualization) offre prestazioni decisamente migliori
rispetto alla virtualizzazione completa (0.5% - 3.0% overhead range [3]), appena al di
sotto degli stessi sistemi non virtualizzati, grazie all'utilizzo di un VMM di tipo 1. Il
VMM utilizzato, detto hypervisor, gestisce direttamente le risorse hardware e fornisce
alle VM un'interfaccia software simile a quella di un normale sistema operativo; la
comunicazione tra VM e hypervisor avviene tramite le hypercalls che sostituiscono
le supercalls utilizzate nei sistemi operativi dalle applicazioni che richiedono l'accesso
all'hardware. Con questo meccanismo è possibile implementare questa tecnologia
anche sulle architetture x86, in quanto le hypercalls consentono di intercettare
qualunque istruzione sensibile eseguita dalle VM, permettendo contemporaneamente
8
alle stesse l'esecuzione di istruzioni non sensibili (user) direttamente sul processore
senza l'intervento del VMM. L'unico svantaggio di questa tecnologia è che i sistemi
guest devono essere opportunamente modificati per poter utilizzare le hypercalls, il
che riduce il numero e il tipo di sistemi operativi effettivamente utilizzabili (i software
proprietari non sono utilizzabili in quanto è necessario avere accesso al codice
sorgente per effettuare le modiche) [4].

Virtualizzazione a livello kernel: in questa tipologia le funzionalità per la
virtualizzazione sono offerte direttamente dal normale kernel del sistema operativo.
Le macchine virtuali così create possono avere ognuna il proprio file-system, ma
condividono il kernel del sistema operativo host. Lo svantaggio di questo approccio
è che possono essere avviate macchine virtuali con un solo tipo di sistema operativo
e che un eventuale falla di sicurezza nel kernel si ripercuoterebbe su tutte le VM.

Virtualizzazione hardware: dal 2005 Intel e AMD hanno cominciato a dotare alcuni
dei processori da loro prodotti di estensioni specifiche per gestire alcuni aspetti della
virtualizzazione direttamente a livello hardware. Queste tecnologie, la VT di Intel e
la Pacifica di AMD, implementano parzialmente nel processore complessi
meccanismi per la gestione delle istruzioni sensibili non privilegiate o per la
traduzione degli indirizzi di memoria delle VM in indirizzi fisici, funzioni che
solitamente spettano al VMM. Piuttosto che essere considerato una tipologia a sè
stante, si può dire che il supporto hardware alla virtualizzazione estende le tecnologie
già esistenti; in particolare, su macchine dotate di questi processori, si possono
teoricamente, para-virtualizzare anche sistemi operativi non modicati. Questo offre
possibilità di virtualizzare con buone performance anche sistemi a codice sorgente
chiuso e quindi non modificabili, come quelli della famiglia Windows [5].

Emulazione: in realtà non è una tipologia di virtualizzazione, ma poiché i due termini
a volte vengono usati indifferentemente in quanto anche l'emulazione permette di
eseguire diverse macchine virtuali su un sistema operativo host, fornendo
un'interfaccia software verso le risorse fisiche. A differenza della virtualizzazione,
l'emulazione non ha lo scopo di eseguire piu operazioni possibili nativamente sul
processore fisico; al contrario è certo che tutte le istruzioni saranno controllate ed
eventualmente tradotte prima di essere eseguite. Questo permette di eseguire anche
ambienti compilati per architetture diverse da quelle della macchina host; in pratica
un'istruzione di un architettura può essere convertita in una o più istruzioni
9
equivalenti di un'altra architettura e poi eseguita. La virtualizzazione invece non
prevede questa eventualità, ma i sistemi operativi guest devono essere compilati per
la stessa architettura della macchina fisica ospitante. Tra i prodotti per l'emulazione
più noti si possono ricordare QEMU, in ambiente Linux, e Microsoft Virtual PC, in
ambiente Windows.
1.2
Xen hypervisor
Grazie alle sue origini nell’open source ed alla folta comunità che ancora oggi contribuisce
in maniera molto attiva allo sviluppo del software, Xen si pone ad essere uno dei più popolari
ed usati monitor di macchine virtuali (VMM). Tuttavia Xen è molto di più che un altro
semplice free VMM, infatti grazie a XenSource oggi Xen è utilizzato anche per le soluzioni
business dei data center. Xen hypervisor offre un potente, sicuro ed efficiente mezzo per la
virtualizzazione di x86, x86_64, IA64, ARM, ed altre architetture di CPU. Supporta una vasta
gamma di Sistemi Operativi tra cui: Windows, Linux, Solaris, e varie versione di BSD.
1.2.1 Princìpi ispiratori
Una delle idee chiave della filosofia di Xen è la separazione tra politiche e meccanismi.
L’hypervisor di Xen implementa i meccanismi, mentre lascia le politiche al Domain-0. Un
meccanismo determina come fare qualcosa, una politica come deve essere fatto [6].
Un esempio concreto di tale separazione è dato dal meccanismo di gestione dei device, infatti
Xen non supporta nessun device nativamente, ma prevede un meccanismo con il quale il
Sistema Operativo ospite può avere accesso diretto al device fisico usando il driver già
esistente.
Anche quando il driver già esistente non è l’ideale per gestire la risorsa, in quanto non è stato
creato con la virtualizzazione in mente e quindi non può gestire più richieste
contemporaneamente da parte di più sistemi, Xen anche in questo caso prevede solo un
meccanismo.
10
In questo modo i Sistemi Operativi guest devono provvedere alla gestione degli accessi,
quindi cooperare tra loro e l’hypervisor.
In contrasto con lo sviluppo degli altri software, ogni nuova release di Xen tenta di fare di
meno delle precedenti (“Less is more”). La ragione di ciò è che Xen gira al più alto livello di
privilegi e per questo un bug nel kernel può compromettere tutto il sistema, comprese le
macchine virtuali [7].
La community di Xen che sviluppa il software è relativamente piccola, perciò lo sviluppo è
concentrato sugli aspetti unici dell’hypervisor piuttosto che su funzionalità già implementate
in altri progetti. Ecco perché i device vengono gestiti dai Sistemi Operativi guest, poiché se
vi è già un driver per Linux per tale hardware, svilupparlo anche per Xen vorrebbe dire sono
un’inutile spreco di tempo. Per mantenere la flessibilità, Xen non forza meccanismi
particolari per le comunicazioni fra domini, ma mette a disposizione dei Sistemi Operativi
ospiti un semplice meccanismo, come la memoria condivisa, e permette ai vari sistemi di
accedervi per scambiarsi informazioni.
1.2.2 Architettura
L’architettura della versione di Xen 4.4 utilizzata, può essere vista come una suddivisione in
tre livelli fondamentali: Hardware, Virtual Machine Monitor (VMM) ed i Domini. La figura
sottostante mostra l’architettura di Xen che ospita quattro VM (Dominio 0, VM1, VM2,
VM3) ed il Virtual Machine Monitor (VMM), responsabile dell’astrazione dell’hardware
sottostante e della gestione dell’accesso per le differenti macchine virtuali. La tecnica di
virtualizzazione utilizzata da Xen è la paravirtualizzazione [7].
11
Fig. 1.2.2.1: Overview dell’approccio paravirtualizzato di Xen
La figura mostra il ruolo speciale della VM chiamata Domain-0 (DOM0), la quale ha accesso
all’interfaccia di controllo della VMM ed è responsabile della creazione, distruzione e della
gestione delle altre VM presenti (chiamate anche Domain-U o DOMU). I software di
gestione e di controllo girano nella Domain-0. L’amministratore può creare una macchina
virtuale con privilegi speciali, nella figura VM 1, la quale può accedere direttamente
all’hardware fisico attraverso una speciale API fornita da Xen. Le altre VM possono accedere
all’hardware sottostante solo grazie alla mediazione che effettua il Domain-0 tramite una sua
API. In questo esempio il Sistema Operativo della VM 1 e VM 2 è modificato per girare su
Xen ed è anche “Xen-aware driver“, nel senso che è a conoscenza delle API da usare per
comunicare con la Domain-0 . Grazie a questo approccio si raggiungono risultati molto vicini
all’esecuzione nativa dei Sistemi Operativi.
Alla partenza, il sistema inizializza un dominio speciale che permette l’uso dell’interfaccia di
controllo, conosciuto come Domain-0 (dom0). Questo dominio iniziale ospita la gestione
software dello user mode, che è responsabile dell’amministrazione dell’ambiente Xen
attraverso i tools della command-line oppure tramite la console XenSource Administration.
Il Domain-0 è anche responsabile della partenza e dell’interruzione dei domini meno
privilegiati, domini ospiti (guest domain), chiamati anche Domain-U (domU). Gestisce
tramite l’interfaccia di controllo, lo scheduling della CPU delle domU, l’allocazione della
12
memoria, e l’accesso ai device fisici come per esempio l’accesso al disco dati o all’interfaccia
di rete, come mostrato in figura 1.2.2.2.
Il dominio di controllo, dom0, funziona come un normale Sistema Operativo Linux.
Possiamo eseguire applicazioni in user mode e gestire il sistema Xen, come anche installare
dei driver per il supporto all’hardware. In questo modo, qualsiasi driver già scritto e
sviluppato per Linux può essere usato anche nell’ambiente di esecuzione Xen, e dà alle
aziende IT un grossa flessibilità nella scelta dell’hardware da usare nelle proprie infrastrutture
computazionali.
Fig. 1.2.2.2: Esempio di uso dei domini da parte di Xen
In definitiva, l’hypervisor è responsabile dell’astrazione del livello hardware e contiene sia
API di Gestione che di virtualizzazione hardware. Al suo interno vi è anche una interfaccia
di controllo che permette alle macchine ospiti di comunicare direttamente o indirettamente
con lo strato hardware sottostante.
Ad interagire con l’API di gestione (Management API) è la regione di controllo che accede
all’hardware e contiene del codice per la gestione dell’user mode [7].
13
1.3
Vantaggi offerti dalla virtualizzazione
Sui server di cui si compone l’infrastruttura di rete monitorata, è presente l’hypervisor Xen
4.4, su cui sono state in seguito installate delle VM con sistema operativo ospite “Ubuntu
Server”. Ad ognuna di esse è demandato il compito di fornire determinati servizi di rete.
Risulta quindi chiaro che ogni server fisico sarà composto da una serie di “host virtuali” (in
seguito chiamati più semplicemente “host”) corrispondenti ad ognuna delle VM installate.
I vantaggi dell'utilizzo di una piattaforma di virtualizzazione sono molteplici, considerando
innanzitutto la riduzione dei costi di
• Acquisto di elaboratori: potendo virtualizzare le macchine fisiche, il numero
effettivo di elaboratori necessari all'attività di un'azienda si riduce enormemente;
• Consumi: riducendo il numero di elaboratori viene ridotto notevolmente il
quantitativo di energia elettrica utilizzata per il loro funzionamento e per l'impianto
di raffreddamento, senza contare inoltre il recupero di volume (spazio rack);
• Manutenzione: vi è una effettiva riduzione del tempo necessario per svolgere le
operazioni sistemistiche più comuni, quali installazione, configurazione, replica e
backup, in quanto il fatto di utilizzare un sistema di virtualizzazione implica che
quello che le VM identificano come il proprio dispositivo di massa, altro non è che
un file di una certa dimensione (alcuni Gigabyte) cui è associato un file di
configurazione proprio della macchina virtuale stessa; quindi interagendo con questo
file, che funge da hard disk virtuale, è possibile svolgere le funzioni sopracitate con
sforzo e tempi ridotti al minimo.
Un ulteriore vantaggio è l'aumento della disponibilità dei servizi erogati, in quanto si ottiene:
• Maggiore tolleranza ai guasti: riducendo il numero di elaboratori la probabilità di
guasti viene automaticamente ridotta;
• Riduzione dei tempi di downtime;
• Semplificazione del ruolo dell’amministratore di sistema grazie alla centralizzazione
ed al monitoraggio dei vari sistemi operativi su una singola macchina fisica;
• Failover e disaster recovery: In questo caso la virtualizzazione può aiutare in
maniera significativa il lavoro dell’amministratore, poichè i server virtuali possono
14
essere agevolmente migrati da una macchina fisica ad un'altra e quindi in caso di
guasto di un server, i suoi servizi possono essere tranquillamente trasferiti su un'altra
macchina senza l’interruzione del servizio;
• Debugging dei Sistemi Operativi e delle applicazioni a run-time, incrementando i
livelli di sicurezza e di isolamento tra i vari sistemi [8].
1.4
Software Zabbix
1.4.1 Zabbix appliance
Una volta creati gli host virtuali, non resta che installare il software Zabbix. A causa del
controllo centralizzato che esercita, ci sono due alternative per installarlo:
a) sul server fisico attraverso l’installazione diretta sul sistema operativo privilegiato;
b) creare una nuova VM a cui è demandato esclusivamente il monitoraggio di tutte le
altre.
Come già detto in precedenza, durante il monitoraggio tutte le informazioni acquisite in
tempo reale vengono memorizzate in un DB relazionale basato su MySQL. Ogni processo
demone Zabbix richiede diverse connessioni al proprio database e la quantità di memoria
allocata per la connessione dipende dalla configurazione del database. Zabbix e soprattutto
il suo database possono richiedere risorse CPU significative a seconda dei parametri
monitorati e del motore del Database scelto. Poiché le operazioni di I/O disco di Zabbix si
limitano alla lettura/scrittura di dati sul server MySQL, a seconda del numero di host e del
numero e della frequenza dei check, le query verso il database possono diventare numerose
a tal punto da degradare le performances del sistema [9]. Risulta quindi conveniente creare
una nuova VM per Zabbix.
Sul sito http://www.zabbix.com/download.php, è possibile scaricare direttamente lo xen
guest adatto. Questa VM prende il nome di Zabbix appliance e fin da subito, ci si rende conto
che tale scelta ha degli ulteriori vantaggi:
15

Centralizzazione del controllo: accedendo via browser all’IP del front-end
dell’appliance, si può avere il controllo dell’intera infrastruttura di rete. A causa del
suo ruolo, l’appliance verrà in seguito chiamata “Zabbix server”;

Fault tolerance: grazie alla delocalizzazione di Zabbix rispetto agli altri host virtuali e
soprattutto rispetto al sistema, un malfunzionamento o interruzione del servizio di
monitoraggio lascia inalterata la disponibilità dei server e dei servizi erogati.
E’ stata utilizzata la Zabbix appliance versione 2.4.1, basata sul sistema operativo OpenSuse
13.1 [10].
1.4.2 Funzionamento
Il funzionamento di Zabbix si basa su tre basilari elementi:
1. Agent: software installato su ogni host da monitorare e che ha il compito di
trasmettere allo Zabbix server i dati richiesti;
2. Item: singolo controllo o una singola performance che viene monitorata dallo Zabbix
server;
3. Trigger: espressione logica applicata al valore di un item, che rappresenta lo stato del
sistema. Può avere due stati: OK quando il valore dell’item monitorato è nella norma
stabilita, altrimenti va in PROBLEM.
Zabbix supporta due tipologie di interrogazioni degli host: polling e trapping. Quando lo
Zabbix server è in polling, interroga costantemente il database, chiedendo cosa gli item
devono controllare, passa alla lista di host e agent a cui appartengono e chiede i dati, li scrive
nel database, li elabora e infine processa tutti i trigger. Lo stato del trigger è ricalcolato ogni
volta che il server riceve un nuovo valore e quest'ultimo è parte dell'espressione del trigger.
Quando il server è trapping, si trova in gran parte inattivo aspettando che l'host o l'agent
inviano i dati. Quando riceverà i dati, riceverà anche la chiave item che il dato rappresenta. Il
server scrive i dati nel Database, li processa, processa anche eventuali trigger. Questa
modalità tende a richiedere meno potenza di calcolo del polling. L'agent si collega al server
periodicamente (di default 2 min), richiedendo una lista di item da controllare e la loro
periodicità.
16
Zabbix supporta anche un altro tipo di dato: l'internal data. Ci sono due distinte categorie di
internal data: i dati che il server mantiene sulle statistiche del database, il numero di item, il
numero di voci history calcolate solo quando vengono chiamati item o trigger e poi le
funzioni aggregate. Le voci history sono dei valori che si trovano nella tabella History del
database Zabbix, questi dati vengono mantenuti per un determinato tempo nella tabella e
sono utili per calcolare la storia di ogni item e di ogni trigger.
Le funzioni aggregate sono pseudo-item che uniscono o aggregano valori da item come in
un gruppo di host. Per esempio si può ottenere il carico medio di CPU per un intero gruppo
di server o il numero totale di utenti loggati in un gruppo di server. Gli Item calcolati vengono
aggiornati con il meccanismo con cui sono stati aggregati (possono essere aggregati con un
meccanismo di polling o con meccanismo di trapping), ad esempio ci siano 5 host in un
gruppo che interroga per il numero totale di utenti, l'item è ricalcolato ogni volta che riceverà
i dati da un host. Questi dati vengono poi scritti nel database, processati e attivati. Se usate
correttamente, queste funzioni possono migliorare la visibilità della salute della rete, tuttavia
grazie al modo di calcolare i dati questi possono aggiungere caricamenti extra al server. È
raccomandato un uso di oggetti aggregati minimo a meno che non si usi la modalità di
trapping.
Ai fini del lavoro svolto, è stato sufficiente servirsi dei controlli tramite polling, il cui
meccanismo può essere così riassunto:
1. Il server esegue una query sul Database chiedendo per ogni item il cui tempo di
controllo vicino è passato (di default 30 s);
2. Il server invia questa richiesta usando la porta configurata per l'host o l'agent. Di
solito Zabbix agent usa la porta 10050;
3. L'agent risponderà alla richiesta con il valore dell'item o con “NOT
SUPPORTED” (l'agent non si preoccupa del tipo di dato di ritorno);
4. Il server scriverà i dati nella tabella item del Database nella colonna Lastvalue.
Inoltre si sposterà il valore precendente nel campo Prevvalue muovendo il Prevvalue
precedente nella tabella History, come da fig. 1.4.2.1;
5. In questa fase il server processa i dati per farli entrare nella tabella trends e qualsiasi
funzione aggregata che include questi dati;
17
6. Zabbix comparerà il valore di ritorno con qualsiasi trigger che deve essere correlato
con questo item, inoltre durante questa fase il server processa i trigger correlati alle
funzioni di aggregazione.
Fig. 1.4.2.1: Meccanismo di data - storage nel database di Zabbix Server
Nei capitoli successivi, verranno illustrate più dettagliatamente le caratteristiche e le
funzionalità di Zabbix, chiarendo i motivi della sua scelta per il monitoraggio
dell’infrastruttura IT assegnata.
18
Capitolo 2: Descrizione dell’infrastruttura IT da
monitorare
In questo capitolo verrà illustrata la struttura della rete da monitorare e la composizione dei
server nei propri singoli host virtuali, evidenziandone anche le connessioni.
2.1
Struttura della rete da monitorare
Lo schema dell’infrastruttura IT da monitorare è riportato in fig. 2.1.1.
Fig. 2.1.1: Mappa dell’infrastruttura IT monitorata
I server presenti sono due: server DMZ e server LAN (Local Network, in figura). Dalla figura
si nota che il primo router (Edge Router) è un dispositivo fisico, mentre il secondo (Main
Router) è costituito da un host virtuale residente sul server LAN.
Configurato in questo modo, Main Router funge da bastion host. Un bastion host è un
sistema fortificato, questo significa che si tratta di un normale sistema operativo e di un
normale hardware a cui sono state assegnate funzioni di controllo o di filtraggio. Ma
soprattutto sul bastion host è stata fatta una configurazione particolare [11]. Ad esempio, è
19
stato installato esclusivamente il software indispensabile per le funzionalità di sicurezza e
solamente i servizi indispensabili. Inoltre Main Router ospita un “application gateway”.
Se si desiderano dei controlli più raffinati, che non siano solo a livello 3 o a livello 4, bisogna
salire fino a livello 7. Al livello 7 si può disporre come sistemi di sicurezza, dei cosiddetti
application gateway. Un application gateway è un punto di controllo dotato anch'esso di una
ACL (Access Control List), che è però in grado di andare ad effettuare i controlli in base ai
dati, o ai comandi applicativi, contenuti nel payload di livello 7. Una ACL è una lista ordinata
di regole che stabilisce quali utenti o processi di sistema possono accedere a degli oggetti, e
quali operazioni sono possibili su questi oggetti [11]. Facendo l'esempio di una rete, ci si
troverebbe a dover decidere se far passare o meno un pacchetto o se permettere o meno ad
un certo utente l'accesso ad un determinato file.
La rete è quindi configurata in modo che l’Edge Router consenta di vedere dall’esterno solo
la sottorete protetta 192.168.20.0/24 e la rete interna non è visibile da internet. Il router
interno, analogamente, segnala alla rete interna 192.168.10.0/24 solo la presenza della
sottorete protetta. I sistemi nella rete interna non possono così stabilire connessioni dirette
a internet.
Questa configurazione è nota anche come “screened subnet” o “architettura a due livelli”
[11], con cui si intendono i livelli di sicurezza delle due sottoreti protetta (in cui è presente la
DMZ) ed interna (LAN). Il principio vuole che gli utenti esterni possano accedere alla DMZ
(limitatamente ai servizi disponibili) e che le risorse interne restino nella zona privata e non
siano accessibili.
Nella DMZ si ospitano i server pubblici (sito Web, server FTP, DNS, mailserver in
ingresso...) che non erogano applicazioni critiche per il laboratorio. Siccome la DMZ è
considerata una zona ad alto rischio, le nuove comunicazioni in arrivo (NEW) dalla DMZ
alla LAN vanno considerate inaffidabili quanto quelle esterne, e per questo bloccate.
La divisione tra le due zone di sicurezza viene operata dai firewall presenti sui due Router.
20
2.2
Server LAN
Questo server eroga i servizi interni per la intranet di Telematics Lab, per questo motivo si
trova nella zona più sicura. Possiede due interfacce fisiche di rete, Eth0 collegata ad uno
switch cui possono collegarsi tutti gli host della intranet ed Eth1 collegata all’Edge Router.
Il server ospita i seguenti host virtuali (DomU) che erogano i relativi servizi:
1. Main Router: Firewall (iptables), VPN (openVPN);
2. Netservices: DHCP (isc DHCP server), DNS (bind), Proxy (Squid);
3. Servers: LAMP, SVN;
4. Trust: Certification Authority (tinyCA);
5. Zabbix Server: monitoraggio.
Ogni host è dotato di un indirizzo IP statico sulla rete interna ed ha una sola interfaccia
virtuale di rete Eth0 che gli permette di comunicare sull’intera intranet. Main Router
naturalmente ne ha anche una seconda Eth1 che, grazie al bridge presente in DOM0 per le
macchine virtuali, riesce a collegarsi all’Edge Router e da qui, ad internet. La fig. 2.2.1
chiarisce come si compone il server LAN e le connessioni tra i suoi host.
21
Fig. 2.2.1: mappa interna del server LAN
Le linee blu indicano connessioni esistenti tra i vari host sulla intranet, le linee verdi invece
indicano le connessioni tra gli host e lo Zabbix server, stabilite sulla intranet dagli agent
installati su ognuno di essi.
Dalla fig. 2.2.1, si nota che è stata aggiunta un’altra interfaccia virtuale di rete al Zabbix Server.
Infatti è proprio da qui che partono le notifiche via mail quando si verifica un evento che lo
richieda. Inizialmente tutto il traffico verso l’esterno passava per Main Router, comprese le
notifiche, ma un guasto proprio su questa macchina impediva la notifica in tempo reale di
questo problema. Per cui si è reso necessario aggirare il Main Router dotando Zabbix Server
di una interfaccia di rete Eth1 da cui spedire autonomamente tutte le notifiche, rendendola
indipendente da Main Router. Ovviamente per mantenere intatta la sicurezza della LAN, è
stato autorizzato solamente il traffico in uscita da Zabbix Server sulle porte 80 (HTTP) e 443
(HTTPS).
Per fare questo, ci si è loggati all’appliance di Zabbix da utente root, e da comando Yast si è
acceduto all’interfaccia di OpenSuse da cui è stato possibile:
22
1. Creare la nuova interfaccia di rete “Virtual Ethernet Card 1” di nome Eth1, con IP
172.17.200.253/24;
2. Assegnare il default gateway su Eth1 all’indirizzo 172.17.200.1/24 (Edge Router);
3. Implementare le regole stabilite per il firewall di OpenSuse su Eth1.
La sicurezza è garantita oltre che dalle regole molto stringenti imposte, dal fatto che Zabbix
server costituisce un application gateway.
2.3
Server DMZ
Questo server eroga i servizi web, come ad esempio il sito di Telematics Lab, per questo
motivo si trova nella zona meno sicura. Possiede una sola interfaccia fisica di rete, Eth0
collegata all’Edge Router.
Il server ospita i seguenti host virtuali (DomU):
1. WWW: LAMP
2. PublicSVN: LAMP
3. Publication: LAMP (attivo solo il server Apache)
Ogni host è dotato di un indirizzo IP statico sulla sottorete protetta ed ha una sola interfaccia
virtuale di rete Eth0 che gli permette di comunicare solo con l’Edge Router, cui è collegato
fisicamente il server.
I singoli host nonostante siano presenti sulla stessa sottorete, sono stati configurati in modo
da rimanere isolati l’uno dall’altro, in modo da massimizzare la sicurezza degli altri due in
caso di attacco di uno. La fig. 2.3.1 mostra tutto ciò.
23
Fig. 2.3.1: Mappa interna del server DMZ
Dalla mappa appena mostrata si vede che l’unica connessione possibile (oltre a quella con
Edge Router) è con Zabbix Server per mezzo dell’agent installato sui singoli host.
Nonostante Zabbix sia presente in un’altra sottorete, la comunicazione via agent per polling
è consentita. Infatti la rete è configurata per rifiutare i nuovi pacchetti (NEW) in arrivo dalla
DMZ alla LAN, ma i nuovi dati che viaggiano nel verso opposto e i pacchetti di risposta
(ESTABILISHED) dalla DMZ alla LAN sono consentiti, dato che quest’ultima è una
sottorete più sicura.
Bisogna solamente aggiornare il file /etc/sysconfig/network/routes su Zabbix Server, con
la seguente riga:
192.168.20.0 192.168.10.1 24 eth0
alla già presente:
default 172.17.200.1 - eth1
creata in precedenza. Ciò funge da configurazione di failover nel caso in cui l’interfaccia Eth1
di Zabbix Server si disattivi, dirottandone le richieste su Main Router che provvederà per
conto suo a farlo recapitare all’host destinatario sulla DMZ. Infine utilizzando Yast da
terminale, si apre la porta 10050 anche su interfaccia Eth1 per consentire il dialogo Zabbix
Server-Agent anche sugli host DMZ.
24
Capitolo 3: Messa a punto del sistema di monitoring
basato sul software Zabbix
In questo capitolo conclusivo verrà mostrato il lavoro svolto, dando risalto alle
configurazioni attuate ed ai risultati ottenuti in forma di grafici e mappe dall’immediata
comprensione, che permettono di raccogliere e monitorare i dati sulla disponibilità e le
performance degli host e dei relativi servizi erogati citati in §2.2, §2.3.
3.1
Zabbix front-end
Lo Zabbix front-end è l’interfaccia web con cui si può consultare lo stato del sistema o anche
modificare le impostazioni di monitoraggio. Risulta locato nella cartella /usr/share/zabbix
dell’utente root sulla Zabbix appliance. Per accedere, basta digitare sul browser di qualsiasi
host presente in intranet, l’indirizzo IP statico assegnato “192.168.10.253”, oppure
configurare il DNS interno associando a tale ip l’alias “zabbix”. In tal modo è sufficiente
digitare: “zabbix/zabbix” e poi effettuare il login con le credenziali da amministratore per
poter iniziare a configurare il tutto.
3.1.1 Dashboard
Appena effettuato il login, la prima cosa che appare è la Dashboard di Zabbix, che offre una
panoramica dello stato dell’infrastruttura, attraverso dettagli di alto livello circa l'ambiente
monitorato. Questa è una delle parti centrali del front-end di Zabbix.
25
Fig. 3.1.1.1: Dashboard di Zabbix
Nella parte superiore della Dashboard c'è una finestra “Server status”. Questa finestra
riassume brevemente lo stato del Server:
• Zabbix server is running: indica che il processo Zabbix_Server è in esecuzione, nel
caso specifico il Servizio è attivo;
• Number of Host: indica il numero di Host monitorati, in totale compresi i Template
che possono essere associati a ciascuno sono 47, nello specifico in totale 8 Host (di
cui 5 nel server LAN e 3 nella DMZ);
• Number of Items: indica il numero di totale Item monitorati, in totale 501 di cui
427 sono attivi;
• Number of triggers: indica il numero di trigger monitorati dal server, in totale 229
di cui 203 abilitati e 26 disabilitati. Nel dettaglio non è stato riscontrato alcun
problema e tutti i 203 trigger funzionano correttamente;
26
• Number of user online: indica il numero di utenti online, nello specifico è possibile
entrare in tre modalità: Admin, Guest e Monitoring. Ci sono due utenti online, Admin
e Monitoring mentre il guest è in modalità off-line;
Subito più in basso c'è la finestra “System status” che specifica lo stato del sistema. Questa
finestra mostra i vari gruppi di Host monitorati dal Server con eventuali tipi di problemi.
Nello specifico ci sono 4 gruppi monitorati, tutti senza alcun problema.
Più in basso, si presenta la finestra “Host status” che fornisce delle specifiche sullo stato degli
Host. In particolare specifica il numero di host con problemi di ogni gruppo e il numero di
host senza problemi di ogni gruppo.
Nella finestra sottostante “Last 20 issues” vengono mostrati meglio i tipi di problemi
riscontrati: Questa finestra indica i problemi rilevati da ogni host con la data dell'ultima
modifica e eventuali messaggi inviati ad altri Server.
3.2
Installazione Zabbix agent
Zabbix agent è un componente installato su ogni host e che consente il monitoraggio delle
sue risorse e dei servizi erogati.
Interrogato periodicamente, l’agent acquisisce i dati dall’host e li riporta allo Zabbix server
per ulteriori elaborazioni. Esistono Zabbix agent per molti dei sistemi operativi esistenti:
Linux, IBM AIX, FreeBSD, NetBSD, OpenBSD, HP-UX, Mac OS X, Solaris: 9, 10, 11 e
Windows: 2000, Server 2003, XP, Vista, Server 2008, 7 [10]. Ognuno di essi è estremamente
efficiente grazie all’uso delle chiamate di sistema native per l’acquisizione dei dati d’interesse.
Su ognuno degli host da monitorare, è stato installato l’agent per Linux, con una procedura
molto semplice data dai seguenti comandi:
user@host:~$ sudo aptitude install zabbix-agent
user@host:~$ sudo nano /etc/zabbix/zabbix_agentd.conf
Server=192.168.10.253
user@host:~$ sudo service zabbix-agent restart
27
Nel secondo comando si edita il file di configurazione dell’agent, inserendo l’indirizzo IP
dello Zabbix Server da cui partiranno le richieste di dati verso l’agent. E’ sufficiente a questo
punto riavviare l’agent per attivare le modifiche e renderlo operativo.
3.3
Configurazione delle azioni
In questo paragrafo verranno descritte sia le funzionalità di scoperta automatica degli host in
rete (auto-discovery), che i meccanismi di notifica attuati dallo Zabbix Server.
3.3.1 Auto-discovery
Si è cominciato andando a configurare la funzionalità di Auto-Discovery sugli host del server
LAN.
Fig. 3.3.1.1: Configurazione della discovery rule su server LAN
Come indicato in fig. 3.3.1.1, i campi da compilare indicano rispettivamente:

Name: nome della regola, in questo caso “Local Network”;
28

Discover by proxy: indica se la ricerca vada effettuata o meno da proxy, nel caso
specifico viene direttamente effettuata da Zabbix Server;

IP range: indica l’intervallo di indirizzi IP su cui indirizzare la ricerca;

Delay: indica l’intervallo di tempo dopo cui Zabbix esegue nuovamente la ricerca, in
questo caso ogni ora;

Checks: indica quale protocollo seguire per intraprendere della ricerca. Sono
disponibili: SSH, LDAP, SMTP, FTP, HTTP, HTTPS, POP, NNTP, IMAP, TCP,
Telnet, Zabbix agent, SNMPv1 agent, SNMPv2 agent, SNMPv3 agent, ICMP ping.
In questo caso si è optato per lo Zabbix agent, è più precisamente per il valore ivi
contenuto nel campo “system.uname”, che riporta il tipo di sistema operativo virtuale
sull’host rilevato [10];

Device uniqueness criteria: definisce i criteri di unicità per la ricerca, che possono
essere “Type of discovery check” consistenti nel controllo SNMP oppure da Zabbix
agent, e “IP Address” come in questo caso, ove se viene rilevato un altro dispositivo
con un IP esistente, si ritiene già rilevato e non viene quindi aggiunto [10].
Infine, come per le successive operazioni di configurazione, si attiva la spunta su “Enabled”
e si clicca su “Update” per attivare il funzionamento della discovery-rule.
E’ necessario adesso configurare l’azione da intraprendere in caso di scoperta di un host. Per
fare questo, si va sul tab Configuration → Actions → Create action e si impostano gli
attributi desiderati. In fig. 3.3.1.2 è riportata la configurazione dell’azione di discovery
intrapresa ogni qualvolta la regola precedentemente impostata rilevi un host.
Fig. 3.3.1.2: Configurazione della Discovery Action attuata ogni qualvolta venga rilevato un server Linux
29
L’azione mostrata in figura si applica a tutti i Linux Server rilevati da tutte le regole di autodiscovery impostate. Gli attributi di ogni azione sono così definiti:

Name: nome dell’azione, in questo caso “Auto discovery. Linux Servers”;

Conditions: condizioni che hanno come risultato 1 (verificate) o 0 (non verificate), e
possono quindi essere combinate secondo le operazioni booleane di AND/OR. Nel
caso considerato, le condizioni riportate in fig. 3.3.1.2 sono tutte poste in AND;

Operations: Se il risultato dell’espressione booleana impostata per le condizioni
risulta 1, vengono intraprese le operazioni descritte in lista. In questo caso, l’host
viene aggiunto al gruppo dei server Linux e gli viene assegnato il relativo template (§
3.5.1).
L’attuazione di tutto ciò, porta al rilevamento dei quattro host presenti sul server LAN. Ciò
viene subito segnalato sulla Dashboard come riportato in figura 3.3.1.3.
Fig. 3.3.1.3: Indicazione del Discovery status sulla Dashboard
Nel caso indicato, “Up” indica il numero di server rilevati ed attivi, mentre “Down” indica il
numero di server rilevati in precedenza, ma attualmente inattivi o assenti. Il numero 2
indicato, è dovuto a degli host cui è stato cambiato l’IP.
3.3.2 Notifica degli eventi
Il secondo tipo di azione utilizzato è il “Trigger Action”, ed è sicuramente il più importante
per il monitoraggio visto che consente la conoscenza in tempo reale degli eventi che
avvengono sui server. Tale azione di notifica è resa possibile configurando la relativa azione
mostrata in fig. 3.3.2.1.
30
Fig. 3.3.2.1: Configurazione della Trigger Action attuata ogni qualvolta un trigger vada nello stato di
PROBLEM
Andando a guardare gli attributi dell’azione riportata in figura, si nota che vengono mandati
messaggi di posta elettronica agli utenti specificati quando qualunque dei trigger attivi
(Enabled) va nello stato di PROBLEM.
3.4
Administration
Il tab “Administration” contiene funzionalità importanti come la gestione degli utenti
ammessi ad utilizzare il front-end e dei relativi permessi, oppure la configurazione dei media
per il recapito delle notifiche.
3.4.1 User & User groups
Tutti gli utenti che possono accedere al front-end di Zabbix, possono farlo con un unico
username e password. Tutte le password vengono criptate e conservate nel database di
Zabbix.
Lo schema dei permessi in base all’utente è così determinato:
1. Zabbix User: l'utente ha accesso al menu “Monitoring”. L'utente non ha accesso a
tutte le risorse di default. Eventuali permessi a gruppi di host (host groups, § 3.5.1)
devono essere esplicitamente assegnati;
2. Zabbix Admin: L'utente ha accesso ai menu “Monitoring” e “Configuration”.
L'utente non ha accesso ad alcun gruppo di host per impostazione predefinita.
Eventuali permessi a gruppi di host devono essere esplicitamente indicati [10];
31
3. Zabbix Super Admin: L'utente ha accesso ai menu “Monitoring”, “Configuration”
ed “Administration”. L'utente dispone di un accesso in lettura e scrittura a tutti i
gruppi di host.
Quanto ai permessi nei confronti dei gruppi di host, ad un singolo utente non può essere
concesso direttamente l'accesso a un host (o gruppo di host). Può essere concesso solo
l'accesso ad un host quando si fa parte di un gruppo di utenti a cui concesso l'accesso al
gruppo di host che lo contiene [10].
Per questo motivo gli utenti vengono assegnati ai cosiddetti “User Groups”, che consentono
di raggruppare vari utenti sia per fini organizzativi che per l'assegnazione dei permessi.
Può spesso avere un senso separare le informazioni disponibili per un gruppo di utenti da
quelle relative ad un altro. Questo può essere realizzato raggruppando gli utenti e quindi
assegnando permessi diversi nei confronti dei vari gruppi di host.
Un utente può appartenere a più gruppi. Ciò costituisce un framework molto flessibile.
Gli utenti presenti di default sono “Admin” di tipo Super Admin e “guest” di tipo User privo
di username e password. A questi ne è stato aggiunto un altro “Monitoring”, dotato di
password ma di tipo User, cui però sono stati aggiunti i permessi per consultare i dati di tutti
gli host. In fig. 3.4.1.1 è mostrato l’elenco degli utenti con i rispettivi gruppi di appartenenza.
Fig. 3.4.1.1: Elenco utenti di Zabbix Server
Per modificare gli attributi di ogni utente, basta cliccare sul nome presente nella tabella. Si
apre una scheda come mostrato in fig. 3.4.1.2.
32
Fig. 3.4.1.2: Scheda di configurazione utente
Nel tab “User” visualizzato, è possibile decidere username (Alias) e password, gruppo/i di
appartenenza. Nel tab “media”, è possibile definire l’e-mail per la ricezione delle notifiche e
da “Permissions” modificare i permessi.
3.4.2 Media Types
Da questa sezione è possibile configurare i canali di recapito delle notifiche inviate da Zabbix
Server. Nel lavoro svolto, è stato scelto di mandare le notifiche via mail.
Per configurare tale canale, si va sul tab Administration → Media Types e scegliere “Create
Media Type”. Si apre una finestra come mostrato in fig. 3.4.2.1.
33
Fig. 3.4.2.1: Configurazione invio mail sullo Zabbix Server
I campi visualizzati indicano rispettivamente:
1. Name: nome del media type;
2. Type: tipo di media;
3. SMTP server: server per la gestione dei messaggi in uscita, in questo caso è stato
scelto proprio lo Zabbix Server residente sul server LAN (localhost);
4. SMTP helo: dominio del server SMTP, in questo caso sempre localhost;
5. SMTP email: l’indirizzo inserito verrà utilizzato come mittente delle notifiche [10].
3.5
Configurazione degli host da monitorare
Dopo aver rilevato tutti gli host con la procedura della auto-discovery, bisogna impostarne i
parametri e le modalità di monitoraggio.
3.5.1 Host & Host groups
In questo momento, degli host sono presenti solo gli indirizzi IP. Per iniziare a configurarli,
bisogna selezionare il tab Configuration → Host e selezionare l’indirizzo IP dell’host da
configurare. Risulta comodo inoltre raggruppare gli host in “Host groups”, in base alle
34
proprie caratteristiche. Ogni host deve appartenere almeno ad un gruppo, che può essere
scelto tra quelli esistenti oppure creato ex novo.
In fig. 3.5.1.1 è mostrato l’esempio di configurazione di Main Router.
Fig. 3.5.1.1: Configurazione di Main Router
I campi visualizzati indicano rispettivamente:
1. Host name: nome con cui Zabbix Server indicherà l’host;
2. Groups, In groups: gruppi a cui appartiene l’host, da cui è possibile eliminarlo usando
il pulsante “>>”. Other groups: altri gruppi esistenti cui è possibile aggiungere l’host
con il pulsante “<<”. Per le sue caratteristiche Main Router, come tutti gli altri host,
sono stati associati ai tre gruppi indicati in figura;
3. New group: con cui è possibile creare un nuovo gruppo;
4. Agent interfaces: specifica come lo Zabbix Server si collega all’host. In questo caso,
si collega tramite l’indirizzo IP statico assegnato sulla intranet attraverso la agent port
10050.
Successivamente si passa alla scheda “Templates”, per associare l’host ad uno o più dei
template offerti da Zabbix. Un template è un set di funzionalità di monitoring preconfigurate,
ed è immaginato come un modello applicabile a tutti gli host con lo stesso sistema operativo
35
o dello stesso tipo. Per esempio, tutti gli host che montano Ubuntu Server sono stati associati
al Template OS Linux.
Quando un template viene collegato ad un host, tutte le entità (item, trigger, grafici) del
template vengono aggiunti all'host. I template sono assegnati direttamente ad ogni singolo
host (e non ad un gruppo di host). I template sono spesso utilizzati per raggruppare entità
per particolari servizi o applicazioni (come Apache, MySQL) e poi applicate agli host che
eseguono tali servizi.
Un altro vantaggio di usare template si verifica quando qualche entità deve essere cambiata
per tutti gli host. Cambiare qualcosa a livello di template, permette di propagare la modifica
a tutti gli host collegati. Pertanto, l'uso di template è un ottimo modo per ridurre il proprio
carico di lavoro e razionalizzare la configurazione di Zabbix.
In aggiunta ai template esistenti se ne possono aggiungere altri, creandoli o importandoli da
file XML esistente. E’ il caso del Template Squid, importato ed associato all’host Netservices
per monitorarne il servizio di proxy server.
Il risultato della configurazione illustrata è mostrata nella fig. 3.5.1.2.
Fig. 3.5.1.2: Schermata degli host configurati ed i relativi template associati su Zabbix Server
L’ultimo attributo “Availability” con la Z verde, indica che l’host comunica con il Zabbix
Server attraverso l’agent e che è attivo.
36
3.5.2 Items
Un item è un’entità che acquisisce il singolo dato richiesto dall’host. Associando l’host ad un
template, gli vengono automaticamente associati anche i relativi item ed è quindi possibile
acquisire i relativi dati.
Per gli host considerati, esistono numerosi item già configurati nei template associati. E’ stato
però necessario crearne di nuovi, dato che c’era bisogno di metriche non disponibili di default
su Zabbix.
Zabbix offre la possibilità di creare nuovi item interrogabili da agent. Leggendo il file di
configurazione /etc/zabbix/zabbix_agentd.conf, ci si accorge che è possibile creare degli
item personalizzati che interrogati dal server, forniscono il dato desiderato attraverso una
riga di comando mandata appositamente in esecuzione.
La procedura seguita per creare un item personalizzato su un determinato host, è la seguente.
Se il comando da lanciare prevede l’autorizzazione di utente root per essere eseguito, bisogna:
1) Creare un file sorgente <nome_script>.c in linguaggio C del tipo mostrato
nell’esempio riportato:
int main()
{
setuid(0); // pone lo user ID al valore corrispondente all’utente root
system("netstat -tulpn | grep dhcpd | grep 67|wc -l "); /* mostra le
connessioni attive di tipo DHCP sulla porta 67 sull’host locale, e ne
trasmette il numero, solitamente 1 se attiva e 0 se inattiva */
return 0;
}
2)
Compilarlo con il comando:
sudo gcc /etc/zabbix/<nome_script>.c -o /etc/zabbix/<nome_script>
3) Modificarne i permessi:
sudo chmod 4111 /etc/zabbix/<nome_script>
4) Provare che il comando fornisca il risultato per l’item desiderato:
/etc/zabbix/<nome_script>
5) Si inserisce in coda al file /etc/zabbix/zabbix_agentd.conf la seguente riga:
37
UserParameter=<key>,/etc/zabbix/<nome_script>
6) Riavvio dell’agent sull’host interessato.
Se invece non c’è bisogno di alcuna autorizzazione del genere, si seguono solo gli ultimi due
punti scrivendo la riga di comando relativa all’item considerato come mostrato al precedente
punto 5).
Per configurare ora l’item su Zabbix, bisogna andare sul tab Configuration → Hosts,
scegliere “Items” sulla riga dell’host desiderato e cliccare sul pulsante “Create item” in alto a
destra. La scheda di configurazione visualizzata è mostrata in fig. 3.5.2.1.
Fig. 3.5.2.1: Configurazione dell’item che fornisce la quantità di spazio utilizzato in byte
I campi mostrati, indicano rispettivamente:
1. Name: nome dell’item, che in questo caso fornisce la quantità di spazio occupata su
disco;
2. Type: protocollo o modalità di monitoraggio, in questo caso tramite Zabbix Agent;
3. Key: contenuto del campo <key> inserito nello UserParameter mostrato in
precedenza;
4. Host Interface: interfaccia per l’host selezionato, in questo caso indirizzo IP:porta;
5. Type of information/Data Type/Units: tipo, formato ed unità di misura del dato
estratto dall’item;
38
6. Use custom multiplier: se abilitato, moltiplica il valore ricevuto per il moltiplicatore
inserito. In questo caso serve a convertire il dato in ingresso ricevuto in Kb in byte,
in modo poi da consentire al server di assegnargli correttamente i prefissi (K, M, G).
7. Update interval (in sec): intervallo di richiesta del dato, di default 30 sec;
8. Flexible intervals/New flexible interval: possibilità di creare intervalli di tempo in cui
utilizzare una diversa frequenza di richiesta dati;
9. Store value: memorizza il valore nel database in tre modi: “As is” lo lascia intatto,
“Delta – Simple Change” lo calcola come differenza tra “value” e “prev_value”, ed
infine “Delta – Speed per second” in cui lo calcola come (value-prev_value)/(timeprev_time).
10. Show value: può applicare funzioni “mappings” al valore ricevuto, o mostrarlo più
semplicemente “As is”.
Conclusa la configurazione, si aggiunge l’item alla lista degli altri già esistenti, e se è stato
configurato correttamente, si leggerà “Enabled” nella colonna “status” di tale lista.
Gli item creati ex-novo per gli host indicati, sono i seguenti (le righe di configurazione
dell’agent ed i codici sorgente in C delle righe di comando “/etc/zabbix/<nome_script>”,
sono tutti riportati in appendice):
Main Router:
1. Dimensione dei pacchetti rifiutati (DROP) da iptables in input. Unità di misura:
bytes, Store value: Delta – Simple Change. Con questo item si monitora il firewall
posto a protezione della LAN ed il monitoraggio di questo dato serve a segnalare
eventuali attacchi di tipo DOS o DDOS in corso;
2. OpenVPN check. Unità di misura: nessuna, Store value: As is. Restituisce 1 in caso
il servizio di openVPN sia attivo, 0 in caso contrario;
3. Internet ping. Unità di misura: nessuna, Store value: As is. Verifica lo stato della
connettività ad internet attraverso un ping sui Google DNS, restituendo 1 nel caso
sia connesso, 0 in caso contrario;
4. Edge router ping. Unità di misura: nessuna, Store value: As is. Verifica lo stato della
connessione all’edge router attraverso un ping sull’interfaccia Eth1, restituendo 1 nel
caso sia connesso, 0 in caso contrario;
39
5. Ping interno con gli host Netservices, Servers e Trust. Unità di misura: nessuna, Store
value: As is. Verifica lo stato della connessione ad ognuno degli altri host del server
LAN attraverso un ping sull’interfaccia Eth0, restituendo 1 nel caso la connessione
sia attiva, 0 in caso contrario;
Netservices:
1. DHCP server check. Unità di misura: nessuna, Store value: As is. Restituisce 1 in
caso il servizio di DHCP sia attivo, 0 in caso contrario;
2. Monitoraggio DNS server autoritativo: Numero di query in ingresso e in uscita dal
server. Unità di misura: nessuna, Store value: Delta – Simple Change;
3. Monitoraggio DNS server autoritativo: Verifica delle connessioni di tipo TCP e
UDP. Restituisce 1 in caso la connessione TCP/UDP del DNS server sia attiva, 0 in
caso contrario;
4. Monitoraggio DNS server autoritativo: Esito delle query inoltrate al server:
o Success: se il server conosce l’IP del dominio richiesto;
o Recursion: in cui il server risolve totalmente (o dà errore) il dominio richiesto;
o Failure: il server non è riuscito a risolvere l’indirizzo a causa di un suo
problema o errore di configurazione;
o Referral: non conosce l’indirizzo IP del dominio richiesto e rimanda quindi
la query ad un altro DNS server;
o NXDomain: dominio non esistente;
o NXrrset: il dominio esiste, ma il suo record nel database del DNS Server non
esiste.
Unità di misura: query, Store value: Delta – Simple Change. Misura il numero di esiti
riportati.
5. Monitoraggio proxy server (gli item presenti nel template Squid sono tanti, ma per
questo lavoro ne sono stati utilizzati solo due):
o Numero di client connessi (da template Squid);
o Numero medio di richieste http al minuto (da template Squid);
40
o Squid check: restituisce 1 in caso il servizio di proxy Squid sia attivo, 0 in caso
contrario.
Unità di misura: nessuna, Store value: As is.
6. Ping interno con gli host Servers e Trust. Unità di misura: nessuna, Store value: As
is. Verifica lo stato della connessione ad ognuno degli altri host del server LAN
attraverso un ping sull’interfaccia Eth0, restituendo 1 nel caso la connessione sia
attiva, 0 in caso contrario.
Servers:
1. Apache server status. Unità di misura: nessuna, Store value: As is. Restituisce 1 in
caso il servizio di Apache server sia attivo, 0 in caso contrario;
2. MySQL status. Unità di misura: nessuna, Store value: As is. Restituisce 1 in caso il
servizio MySQL sia attivo, 0 in caso contrario;
3. Ping interno con Trust. Unità di misura: nessuna, Store value: As is. Verifica lo stato
della connessione all’host Trust del server LAN attraverso un ping sull’interfaccia
Eth0, restituendo 1 nel caso la connessione sia attiva, 0 in caso contrario.
Zabbix Server:
1. Internet ping. Unità di misura: nessuna, Store value: As is. Verifica lo stato della
connettività ad internet attraverso un ping sui Google DNS, restituendo 1 nel caso
sia connesso, 0 in caso contrario.
DMZ – WWW, Publication, PublicSVN:
1. Apache server status. Unità di misura: nessuna, Store value: As is. Restituisce 1 in
caso il servizio di Apache server sia attivo, 0 in caso contrario;
2. MySQL status (solo su WWW e Publication). Unità di misura: nessuna, Store value:
As is. Restituisce 1 in caso il servizio MySQL sia attivo, 0 in caso contrario;
3. Spazio su disco occupato e libero. Unità di misura: byte, Store value: As is.
Restituiscono i valori indicati e vengono configurati secondo le modalità illustrate in
fig. 3.5.2.1.
L’utilità degli item introdotti sta sia nell’essere alla base delle altre entità di monitoraggio che
saranno a breve introdotte, che per la diagnostica dell’infrastruttura.
41
3.5.3 Triggers
I trigger sono espressioni logiche che valutano i dati raccolti dagli item, indicando l’attuale
stato del sistema.
Mentre gli item vengono utilizzati per raccogliere dati di sistema, ai trigger è lasciato il
compito di valutare se tali dati siano nella norma o meno attraverso una espressione booleana
che permette di definirne l’accettabilità.
Un trigger può trovarsi in due stati:
a) OK: l’espressione booleana risulta non verificata, per cui il dato registrato è da
ritenersi nella norma;
b) PROBLEM: l’espressione booleana del trigger risulta invece positiva, per cui il dato
acquisito non è nella norma stabilita e vengono intraprese le conseguenti azioni
descritte nel §3.3.2.
Lo stato del trigger viene ricalcolato ogni 30 secondi. Quando un trigger si trova in stato di
PROBLEM, viene per prima cosa segnalato nella Dashboard con un livello di attenzione
stabilito in fase di configurazione, come mostrato in fig. 3.5.3.1.
Fig. 3.5.3.1: Esempio di configurazione di un trigger con livello di attenzione “High”
42
Per configurare un nuovo trigger, si va sul tab Configuration → Hosts, si seleziona “Trigger”
dalla riga dell’host corrispondente (in questo caso Main Router) e si clicca sul pulsante
“Create Trigger”. Come mostrato in figura, il nuovo trigger è stato configurato compilando
i campi seguenti:
- Name: nome assegnato. In questo caso si è anche fatto uso della macro
{HOST.NAME}, che riporta il nome dell’host cui appartiene il trigger. Ciò risulta
particolarmente utile per clonarlo (tasto “Clone” in basso) su altri host;
- Expression: espressione booleana costruita utilizzando i valori raccolti dagli item
inseriti. Nel caso considerato, si sono utilizzati gli item derivati da Internet ping su
Main Router, dalle key “internet.ping.last” ed “internet.ping.nodata”. L’espressione
visualizzata significa che, se per 3 minuti (180 s in parentesi) l’item padre
“internet.ping” restituisce 0 o non restituisce alcun dato, il trigger va in stato di
PROBLEM e segnala il problema utilizzando il contenuto del campo “Name”;
- Severity: da qui si può stabilire il grado di attenzione del trigger su una scala di sei
livelli. In questo caso, dato che il trigger segnala l’assenza di connessione ad internet
su Main Router e quindi su tutta la LAN, è stato scelto il livello di attenzione “High”.
Conclusa la configurazione, si aggiunge il trigger alla lista degli altri già esistenti e se gli item
contenuti nell’espressione sono stati configurati correttamente, si leggerà “Enabled” nella
colonna “status” di tale lista.
Così come per gli item, esiste anche una varietà di trigger esistenti e già abilitati in modo da
fornire un monitoring di base già abbastanza dettagliato. In aggiunta a ciò, sono stati creati
dei nuovi trigger al fine di completare il controllo sull’infrastruttura, specialmente per quanto
riguarda la connettività e la disponibilità dei servizi.
I trigger creati e mostrati nel seguente elenco, si basano tutti sugli item creati esposti in
precedenza.
Main Router:
1. Internet connection is down on {HOST.NAME} for 3 minutes: appena mostrato;
2. Edge router connection is down on {HOST.NAME} for 3 minutes: ottenuto
clonando il precedente e sostituendo il relativo item con “edge_router.ping”;
43
3. Netservices/Servers/Trust internal connection is down on {HOST.NAME} for 3
minutes: ottenuto clonando il precedente e sostituendo il relativo item con
“netservices/servers/trust.ping” – severity: Warning;
4. OpenVPN service is down on {HOST.NAME} for 3 minutes: ottenuto dall’item
“OpenVPN Check”, si attiva quando riceve il valore 0 per tre minuti. Severity:
Average.
Netservices:
1. DHCP service is down on {HOST.NAME} for 3 minutes: ottenuto dall’item
“DHCP Check”, si attiva quando riceve il valore 0 per tre minuti – severity: Warning;
2. DNS TCP connection is down on {HOST.NAME} for 3 minutes: ottenuto
clonando il precedente e sostituendo il relativo item con “dns_tcp.check” - severity:
Warning;
3. DNS UDP connection is down on {HOST.NAME} for 3 minutes: ottenuto
clonando il precedente e sostituendo il relativo item con “dns_udp.check” - severity:
Warning;
4. Squid Proxy service is down on {HOST.NAME} for 3 minutes: ottenuto clonando
il precedente e sostituendo il relativo item con “squid.check” - severity: Warning;
5. Servers/Trust internal connection is down on {HOST.NAME} for 3 minutes:
ottenuto clonando il corrispondente di Main Router e sostituendo il relativo item con
“servers/trust.ping” - severity: Warning.
Servers:
1. HTTP service is down on {HOST.NAME} for 3 minutes: ottenuto dall’item
“Apache server Check”, si attiva quando riceve il valore 0 per tre minuti - severity:
Warning;
2. MySQL service is down on {HOST.NAME} for 3 minutes: ottenuto clonando il
precedente e sostituendo il relativo item con “mysql.ping” - severity: Warning;
3. Trust internal connection is down on {HOST.NAME} for 3 minutes: ottenuto
clonando il corrispondente di Main Router e sostituendo il relativo item con
“trust.ping” - severity: Warning.
44
Zabbix Server:
1. Internet connection is down on {HOST.NAME} for 3 minutes: identico a quello
mostrato in figura.
DMZ – WWW, Publication, PublicSVN:
1. HTTP service is down on {HOST.NAME} for 3 minutes: ottenuto dall’item
“Apache server Check”, si attiva quando riceve il valore 0 per tre minuti - severity:
Warning;
2. MySQL service is down on {HOST.NAME} for 3 minutes (solo su WWW e
Publication): ottenuto clonando il precedente e sostituendo il relativo item con
“mysql.ping” - severity: Warning.
3.5.4 Grafici
Il grafico è sicuramente la rappresentazione più potente per valutare in maniera immediata le
performance di sistema. Zabbix offre una vasta gamma di grafici attraverso i template di cui
è dotato, lasciando comunque la possibilità all'utente di creare dei grafici personalizzati.
Nel lavoro effettuato sono stati utilizzati sia i grafici disponibili per monitorare le
performance degli host, che creati di nuovi per il monitoraggio dei servizi erogati.
Per creare un nuovo grafico, bisogna selezionare il tab Configuration → Hosts e selezionare
“Graph” dalla riga dell'host interessato. A questo punto, basta cliccare su pulsante “Create
Graph” in alto a destra per aprire la schermata di configurazione mostrata i fig. 3.5.4.1.
45
Fig. 3.5.4.1: Esempio di configurazione di un nuovo grafico
Gli attributi del nuovo vengono impostati nel modo seguente:
o Name: nome attribuito al grafico, in questo caso “Memory Usage”;
o Width/height: dimensioni in pixel del grafico, 900x200 di default;
o Graph Type: tipo di grafico disponibile, tra cui:
o Normal: ordinario, gli item monitorati sono visualizzati come linee continue
su piano di assi Y (item) vs X (tempo);
o Stacked: come il precedente ma in pila, dove ogni item viene sovrapposto
all’altro ed ognuno si distingue per una diversa colorazione dell’area sottesa;
o Pie: a torta;
o Exploded: a torta “esploso”.
o Show Legend: se selezionato, mostra la legenda;
o Show working time: se selezionato, permette di visualizzare anche il periodo di
inattività dell’host (non-working hours) come porzione dallo sfondo grigio (non
disponibile per i grafici a torta) [10];
o Show triggers: permette di visualizzare eventuali trigger associati agli item visualizzati,
come linee tratteggiate in grassetto (non disponibile per i grafici a torta);
46
o Percentile line (left/right): mostra il percentile per l'asse Y a sinistra/destra. Se, per
esempio, il 95% percentile è impostato, la linea del grafico sarà al livello in cui rientra
il 95 per cento dei valori disponibili sull’asse. Disponibile solo per i grafici “Normal”;
o Y axis min/max value: imposta il valore minimo/massimo dell'asse Y:
o Calculated: tali valori dell'asse Y saranno calcolati automaticamente;
o Fixed: tali valori per l'asse Y sono fissi. Non disponibile per i grafici a torta;
o Item: il valore più recente dell’item selezionato sarà il valore
minimo/massimo.
o Items: dati da visualizzare e relativa grafica. In questo caso sono la quantità di
memoria disponibile e di memoria totale, di cui si può scegliere anche il colore
dell’area sottesa, la posizione dei valori sull’asse (left/right) ed il valore da visualizzare
(min, max, avg, all) nel caso in cui esistano più valori per l’item considerato.
Il grafico relativo a questa configurazione è mostrato in fig. 3.5.4.2.
Fig. 3.5.4.2: Grafico che mostra l’andamento dell’utilizzo della memoria su Main Router
Il grafico in figura, mostra l’andamento dell’utilizzo della RAM assegnata a Main Router
nell’ultima ora. Questo tipo di grafico è strutturato in maniera particolare rispetto agli altri
grafici, dato che ha un valore massimo fisso sull’asse X rappresentato dalla memoria totale
che sottende un’area di colore rosso. A quest’area, ne viene sovrapposta una verde che
rappresenta lo spazio disponibile.
E’ quindi chiaro che tale grafico è strutturato in modo da mostrare una prevalenza di colore
verde se la memoria disponibile è sufficiente, o una prevalenza di colore rosso se la memoria
disponibile comincia a scarseggiare. Questo tipo di grafico risulta visivamente molto efficace,
47
per cui è stato inserito nel template OS Linux in modo da essere replicato su tutti gli altri
host.
I tipi di grafico utilizzati, mostrati nelle rispettive figure, per il monitoraggio di host e servizi
sono i seguenti:
o Memory Usage: appena descritto, utilizzato su tutti i 7 host e lo Zabbix Server;
o Cpu Utilization: fornito da template OS linux, è di tipo “Stacked” ed utilizzato su
tutti i 7 host e lo Zabbix Server;
Fig. 3.5.4.3: Grafico dell’andamento utilizzo CPU su host DMZ – WWW. E’ mostrato un picco di
percentuale di attesa I/O intorno alle 13:18.
o Disk Usage: è stato creato utilizzando due item già presenti nel template OS Linux:
Free Disk e Used Disk. E’ di tipo “Exploded” ed è stato utilizzato su tutti i 7 host e
lo Zabbix Server;
Fig. 3.5.4.4: Grafico di utilizzo disco su host DMZ – WWW. La rilevante occupazione del disco deriva
dal motivo che vi risiedono tutte i dati relativi al sito web di Telematics Lab.
48
o Network traffic on Eth1: fornito da template OS linux, è di tipo “Stacked” ed è
utilizzato su Main Router per monitorare il traffico esterno totale in ingresso e in
uscita dalla LAN;
Fig. 3.5.4.5: Grafico del traffico sull’interfaccia di rete Eth1 esterna alla LAN
o Grafici di monitoraggio servizi: sono stati creati quattro nuovi grafici per monitorare:
o Dimensione dei pacchetti scartati dal firewall su Main Router in ingresso;
o Statistiche sull’esito delle query inoltrate al server LAN;
o Numero di query in ingresso e in uscita dal server LAN;
o Statistiche su Squid proxy server, mostrate in fig. 3.5.4.6.
Fig. 3.5.4.6: Grafico riportante a) Numero di client connessi al proxy server (scala a destra); b) numero
medio di richieste HTTP al minuto (scala a sinistra).
I grafici di monitoraggio servizi, proprio come quello di esempio riportato nella precedente
figura, sono di tipo “Normal” e contengono gli item creati in precedenza per i servizi.
49
3.6
Risultati ottenuti
Una volta configurato quanto appena visto, è finalmente possibile visualizzare quanto
configurato finora. In questo paragrafo conclusivo, si vedrà con quali rappresentazioni visive
i dati acquisiti possono essere visualizzati.
3.6.1 Schermate
In una schermata, è possibile aggregare più grafici o altri elementi in modo da fornire una
rapida panoramica dello stato del sistema.
Una schermata è organizzata come una tabella, in cui si può scegliere il numero di righe e
colonne e l’elemento da inserire in ogni singola cella. In questo lavoro, tra i tanti tipi di
elementi disponibili, sono stati visualizzati:
o Grafici (sia creati che già esistenti);
o Plain text (informazione visualizzata in forma testuale);
o Mappe (spiegate nel sottoparagrafo successivo).
Per creare una schermata, si va sul tab Configuration → Screens → Create Screen e si
imposta il nome ed il numero di righe e colonne.
In seguito si inserisce in ogni cella l’elemento desiderato cliccando sul link “Change”. In fig.
3.6.1.1, è mostrato l’esempio dell’inserimento di un grafico in una cella.
Fig. 3.6.1.1: Inserimento di un grafico nella cella di una schermata
50
I campi visualizzati vengono così impostati:
o Resource: tipo di rappresentazione dei dati, in questo caso “Graph”;
o Graph name: dà la possibilità di selezionare tra i grafici esistenti, attraverso la finestra
presente sulla destra di fig. 3.6.1.1, in questo caso si tratta del grafico che traccia
l’andamento di utilizzo della memoria sull’host Netservices;
o Width/Height: dimensione in pixel del grafico nella cella;
o Column span / Row span: estende la cella per il numero selezionato di
colonne/righe, in tutti i casi sono stati lasciati i valori di default (1;1).
In fig. 3.6.1.2, è mostrato l’inserimento di un testo semplice (Plain Text) in una cella.
Fig. 3.6.1.2: Inserimento di un testo nella cella di una schermata
In questa modalità, è possibile visualizzare i dati più recenti raccolti da un item in forma
testuale, collocandoli in una tabella di due colonne: timestamp (data ed ora di acquisizione
del dato) ed item selezionato. Ci sono alcuni campi diversi rispetto al caso precedente:
o Show lines: indica la quantità di dati più recenti da visualizzare, ovvero quante righe
deve avere la tabella visualizzata in cella;
o Dynamic item: consente di visualizzare lo stesso item per diversi host.
Una volta impostate tutte le schermate, è possibile visualizzarle dal tab Monitoring →
Screens, in modo da apprezzarne l’impatto visivo e cominciare a monitorare l’infrastruttura.
Come si vedrà dalle prossime figure, è possibile selezionare la schermata da visualizzare dal
51
menu a tendina “Screens” e scegliere l’intervallo temporale da indagare attraverso lo
strumento “Zoom”, posto in alto alla schermata.
Le schermate disponibili sono le seguenti:
o Schermata di sistema per l’host: configurata per tutti i sette host e Zabbix Server,
raccoglie i grafici: “Memory usage”, “CPU utilization” e “Disk Usage” riguardanti le
performance di sistema. In fig. 3.6.1.3 ne è riportato un esempio;
Fig. 3.6.1.3: Schermata “Zabbix Server”, che riporta oltre alle principali performance di sistema, anche le
operazioni attuate sul server MySQL di Zabbix. Da notare in alto a destra, la scarsità di RAM disponibile.
o Schermata “Service Graph”: raggruppa tutti i grafici che monitorano le performance
dei servizi erogati dal server LAN. E’ riportata in fig. 3.6.1.4;
52
Fig. 3.6.1.4: Schermata “Service Graph”
o Schermate “Host status” e “Services Status”: raccolgono in maniera testuale i dati
riguardanti lo stato rispettivamente di tutti gli host e dei servizi monitorati. Lo stato
di disponibilità (Up) è rappresentato dal valore 1, mentre la non disponibilità (Down)
dal valore 0 o dall’assenza di valori ricevuti (No data found).
Fig. 3.6.1.5: Schermata “Host status”
53
Fig. 3.6.1.6: Schermata “Services status”
3.6.2 Mappe
La visualizzazione mediante schermate fornisce sì una rappresentazione analitica dello stato
del sistema, ma non abbastanza immediata. Per incrementare l’efficacia e l’immediatezza
visiva dell’impianto di monitoraggio, Zabbix offre la possibilità di costruire mappe della rete
monitorata che consentono di avere una panoramica sia della sua struttura che soprattutto
dello stato dei suoi componenti.
Per configurare una mappa, si impostano inizialmente i parametri generali (nome,
dimensioni, mostra stato e problemi dei trigger) da Configuration → Maps → Create Map.
Creata la mappa, si passa a popolarla con gli elementi desiderati (host, router, ecc.)
rappresentati da icone, e collegandoli con i “Link”. In fig. 3.6.2.1, è riportato un esempio di
configurazione mappa.
54
Fig. 3.6.2.1: Configurazione della mappa dell’intera infrastruttura (Whole network)
Nella mappa riportata in figura sono state aggiunte, utilizzando il pulsante “Icon +”, le tre
icone di tipo “server” rappresentanti i server LAN, DMZ ed il bastion host “Main Router”,
l’icona del router che rappresenta Edge Router e la nuvola che indica Internet. Se c’è un
problema su qualche host, verrà visualizzato il nome del relativo trigger sotto la relativa icona.
Una volta posizionate le icone, si aggiungono i link selezionando a coppie le icone interessate,
e poi cliccando su “Link +”. Si apre una finestra come mostrato in fig. 3.6.2.2.
55
Fig. 3.6.2.2: Configurazione del link tra Edge Router ed Internet
Si configura il link impostando:
o Label: etichetta del link, in questo caso l’indirizzo IP pubblico con cui Internet vede
l’intera infrastruttura;
o Connect to: icona a cui collegare l’elemento selezionato, in figura “Cloud” (Internet);
o Type / Colour (OK): stile di default della linea che rappresenta il link, in questo caso
verde ed in grassetto;
o Link indicators: lista di trigger collegata al link. Se il trigger va in stato di PROBLEM,
la linea del link cambia stile. Nell’esempio considerato, se la connessione ad Internet
risulta disattivata per 3 minuti, la linea passa da continua verde a tratteggiata rossa.
In fig. 3.6.2.3 sono riportate due mappe dell’intera rete, riguardanti due differenti situazioni.
56
Fig. 3.6.2.3 a): Mappa dell’intera rete con tutti i trigger in stato di OK
Fig. 3.6.2.3 b): Mappa dell’intera rete con problemi di connettività ad Internet su Main Router
La fig. 3.6.2.3 b), è stata ottenuta simulando un guasto sull’interfaccia di rete Eth1 di Main
Router. Dopo tre minuti, la mappa in questione passa dalla situazione in figura a) a quella in
figura b). Si attivano tre trigger su Main Router (3 Problems, in figura), ed il suo sfondo
diventa rosso, colore indice del trigger di maggior livello di attenzione.
Inoltre, dato che i trigger rivelatori sono così configurati sui link:
57
o Local Network – Main router: linea continua verde di default e diviene tratteggiata
rossa se si attiva uno dei seguenti trigger:
o Netservices/Servers/Trust internal connection is down on {HOST.NAME}
for 3 minutes (in stato di OK),
o Zabbix agent on {HOST.NAME} is unreachable for 3 minutes (in stato di
OK);
o Main Router – Edge Router: linea continua in grassetto verde di default e diviene
tratteggiata rossa se si attiva il trigger “Edge router connection is down on
{HOST.NAME} for 3 minutes” (in stato di PROBLEM);
o Edge Router – Internet: linea continua in grassetto verde di default e diviene
tratteggiata rossa se si attiva il trigger “Internet connection is down on
{HOST.NAME} for 3 minutes” (in stato di PROBLEM);
questi ultimi due link appariranno come linee tratteggiate rosse.
L’icona di nome “Local Network” presente sulla mappa generale, corrisponde a sua volta ad
un’altra mappa di nome “Local Network on Big Bang”, che è una rappresentazione dello
stato del server LAN.
In fig. 3.6.2.4, si riporta un’immagine di tale mappa durante la simulazione del guasto.
58
Fig. 3.6.2.4: Mappa del server LAN durante la simulazione di guasto sull’interfaccia Eth1 di Main
Router. Le linee tratteggiate rosse indicano i collegamenti non funzionanti, le linee continue quelli che
funzionano.
I link visibili in figura, sono stati così impostati:
o Link Zabbix Server – host: dall’etichetta “Zabbix Agent; Eth0”, sono linee continue
verdi di default e divengono tratteggiate rosse quando si attiva uno dei seguenti
trigger:
o Zabbix agent on {HOST.NAME} is unreachable for 3 minutes: in stato di
OK su tutti gli Host;
o “Service” on {HOST.NAME} is down for 3 minutes: permette di tenere
d’occhio anche la disponibilità dei servizi, che in questo caso sono tutti attivi
tranne openVPN su Main Router che si trova in stato di down;
59
o Link Host – host: dall’etichetta “Eth0”, sono linee continue blu di default e
divengono tratteggiate rosse quando la relativa connessione interna sull’interfaccia di
rete virtuale Eth0 è disattivata (tutto OK);
o Link Main Router – Internet: dall’etichetta “Eth1 – 172.17.200.2”, è una linea
continua blu di default e diventa tratteggiata rossa quando si attiva il trigger “Internet
connection on {HOST.NAME} is down for 3 minutes” (in stato di PROBLEM);
o Link Zabbix Server – Internet: dall’etichetta “Eth1 – 172.17.200.253”, è una linea
continua blu di default e diventa tratteggiata rossa quando si attiva il trigger “Internet
connection on {HOST.NAME} is down for 3 minutes” (in stato di OK).
L’icona di nome “DMZ” presente sulla mappa generale corrisponde a sua volta alla mappa
di nome “DMZ Hosts Chart”, che fornisce una rappresentazione dello stato del server DMZ.
Fig. 3.6.2.5: Mappa del server DMZ
I link visibili in figura, sono tutti del tipo host – Zabbix Server, sono rappresentati da linee
continue verdi di default e tratteggiate rosse quando si attiva uno dei seguenti trigger:
60
o Zabbix agent on {HOST.NAME} is unreachable for 3 minutes: in stato di OK;
o “Service” on {HOST.NAME} is down for 3 minutes: i servizi sono tutti attivi.
Risulta quindi evidente che la combinazione della segnalazione dei problemi che possono
affliggere la rete, sia sulle singole icone che sui relativi link, fornisce quel fattore di
immediatezza visiva che rende la mappa preferibile ai tipi di schermata visti in precedenza,
almeno per quanto riguarda la valutazione qualitativa dello stato del sistema.
3.6.3 Provvedimenti attuati
E’ chiaro che gli strumenti visti sinora recano in sé funzionalità di diagnostica e di valutazione
delle prestazioni di sistema sia in maniera qualitativa che quantitativa. Ciò rende possibile
accorgersi di potenziali problemi anche quando i trigger sono in stato di OK.
E’ il caso dell’utilizzo di memoria centrale in Zabbix Server, che risultava troppo elevato e
rischiava di pregiudicarne le prestazioni. Per questo motivo è stato deciso di aumentarne la
RAM prelevandola dall’host che ne faceva minor utilizzo. Guardando i grafici di utilizzo
memoria di tutti gli host, si è notato che Trust aveva il minor utilizzo in assoluto (meno del
22%), per cui si è deciso di abbassarne la RAM assegnata di 256 MB per poter incrementare
quella di Zabbix Server della stessa misura.
Nelle figure 3.6.3.1/2 sono mostrati gli effetti di tali modifiche.
Fig. 3.6.3.1: Grafici relativi alla situazione precedente (sinistra) e conseguente (destra) all’aumento di RAM
su Zabbix Server da 560 a 816 MB.
61
Fig. 3.6.3.2: Grafici relativi alla situazione precedente (sinistra) e conseguente (destra) al calo di RAM su
Trust da 512 a 256 MB.
L’effetto di tale variazione è pressochè nullo su Trust, mentre si rileva benefico per la RAM
di Zabbix Server.
62
Conclusioni e sviluppi futuri
L’utilizzo del software Zabbix sull’infrastruttura IT assegnata si è rivelato molto valido, sia a
causa della sua flessibilità che intuitività.
In particolare, una caratteristica molto interessante di Zabbix è la possibilità di creare una
mappa della rete che si sta monitorando. Risulta molto semplice creare la mappa della rete e
associare ad ogni icona aggiunta, un host monitorato. La mappa effettua anche una piccola
descrizione di eventuali problemi degli host. Questo aspetto è molto vantaggioso perchè
permette di ottenere una panoramica della rete e permette la comprensione, anche solo
sommaria, della sua struttura e dei vari problemi che l'affliggono anche a persone che non
hanno mai lavorato con tale software.
Attualmente ICANN ha implementato una infrastruttura di Zabbix distribuita sui cinque
continenti per monitorare i servizi DNS che gestiscono i gTLD (global Top Level Domain)
di Internet [12] e Freenet ha automatizzato il processo di monitoraggio di un ambiente Java
J2EE.
Al termine della Zabbix Conference 2014 svoltasi a Riga il 12 e 13 settembre, Alexei
Vladishev fondatore di Zabbix, ha salutato la platea con un elenco di "5 cose da migliorare
in Zabbix" [13] su cui si concentreranno presumibilmente i prossimi sforzi del team di
sviluppo:

Una nuova interfaccia utente;

API più veloci e stabili;

Scalabilità e High Availability;

Autenticazione e cifratura del traffico tra agent e server;

Reportistica avanzata.
Ciò significa che Zabbix è un grande progetto ancora in espansione.
63
Bibliografia
[1] Goldberg R. P., Popek G. J.: "Formal Requirements for Virtualizable third generation
architectures". Communications of the ACM 17(7), 1974.
[2] Sbirrazzuoli R.: “Virtualizzazione, concetti teorici. Sviluppo di un sistema di management di ambienti
di esecuzione virtualizzati per sistemi batch”. 2008.
[3] Menon A., Santos J. R., Turner Y., Janakiraman G., Zwaenepoel W. Performance
overheads in Xen: “Diagnosing Performance Overheads in the Xen Virtual Machine Environment”,
2005.
[4] Villano U., Mancini E., Tretola R., Rak M.: "A framework for Virtual Cluster Performance
Evaluation" 2009.
[5]
Wikipedia:
“Timeline
of
Virtualization
Development”.
[Online]
http://en.wikipedia.org/wiki/Virtualization_Development.
[6] Barham P., Dragovic B., Fraser K., Hand S., Harris T.: "Xen and the Art of Virtualization",
in Proceedings of the nineteenth ACM symposium on Operating systems principles, October
2003.
[7] Xen: Xen. [Online] http://www.xen.org.
[8] Grossato D.: “Vantaggi della virtualizzazione. La Virtualizzazione”. 2010. [Online]
http://www.slideshare.net/dgrossato.101/la-virtualizzazione-2010.
[9] Pifferi A., Nantista G., Ianniello L., Lora A., Simonetti M.: “Analisi e Implementazione di
Sistemi per il Monitoraggio della Rete Wireless Relativa al Progetto ADD (Anti Digital Divide) e delle
Infrastrutture di Campus AdR RM1”, Smart eLab – volume 2, 2013.
[10]
Zabbix
Documentation
2.4:
“Zabbix
Manual”,
[Online]
https://www.zabbix.com/documentation/2.4/manual.
[11] Bauer M. D.: “Server Linux sicuri”. Tecniche Nuove editore, 2003.
[12] Uribe I.: “Monitoring the Internet: when 6 millions of triggers is not enough”, Zabbix Conference.
September 12, 2014 – Riga, Latvia.
[13] Vladishev A.: “5 Things to Improve in Zabbix”, Zabbix Conference. September 13, 2014 –
Riga, Latvia.
64
Appendice
In questa sezione sono raccolte le righe di comando che permettono agli item creati di
raccogliere dati, ed il relativo codice sorgente in C nel caso siano necessarie le autorizzazioni
di utente root per eseguirle.
Main Router:
1. Dimensione dei pacchetti rifiutati (DROP) da iptables in input.
Riga di configurazione nell’agent:
UserParameter=iptables.block,/etc/zabbix/iptables_drop
Codice sorgente del comando:
int main()
{
setuid(0);
system("/sbin/iptables -L -n -v -x | grep 'Chain INPUT' | awk {'print $7'}");
return 0;
}
2. OpenVPN check.
Riga di configurazione nell’agent:
UserParameter=ovpn.check,/etc/zabbix/ovpn_check
Codice sorgente del comando:
int main()
{
setuid(0);
system("netstat -tulpn | grep 1194 | wc -l");
return 0;
}
3. Internet ping.
Riga di configurazione nell’agent:
UserParameter=internet.ping, ping 8.8.8.8 -c 1 | grep received| awk
{'print $4'}
4. Edge router ping.
65
Riga di configurazione nell’agent:
UserParameter=edge_r.ping,ping 172.17.200.1 -c 1 | grep received| awk
{'print $4'}
5. Ping interno con gli host Netservices, Servers e Trust.
Righe di configurazione nell’agent:
UserParameter=netservices.ping, ping netservices -c 1 | grep received|
awk {'print $4'}
UserParameter=servers.ping, ping servers -c 1 | grep received| awk
{'print $4'}
UserParameter=trust.ping, ping trust -c 1 | grep received| awk {'print
$4'}
Netservices:
1. DHCP server check.
Riga di configurazione nell’agent:
UserParameter=dhcp.check,/etc/zabbix/dhcp_check
Codice sorgente del comando:
int main()
{
setuid(0);
system("netstat -tulpn | grep dhcpd | grep 67|wc -l ");
return 0;
}
2. Monitoraggio DNS server autoritativo: Numero di query in ingresso e in uscita dal
server.
Righe di configurazione nell’agent:
UserParameter=bind.queries.in[*],curl http://localhost:8053/
2>/dev/null | xml2 | grep -A1 "/isc/bind/statistics/server/queriesin/rdtype/name=$1$" | tail -1 | cut -d= -f2
UserParameter=bind.queries.out[*],curl http://localhost:8053/
2>/dev/null | xml2 | grep -A1
"/isc/bind/statistics/views/view/rdtype/name=$1$" | tail -1 | cut -d=
-f2
3. Monitoraggio DNS server autoritativo: Verifica delle connessioni di tipo TCP e
UDP.
Riga di configurazione nell’agent:
UserParameter=bind.tcp.check,/etc/zabbix/dns_tcp_check
66
Codice sorgente del comando:
int main()
{
setuid(0);
system("netstat -tulpn | grep named | grep 254:53| grep tcp | wc -l");
return 0;
}
Riga di configurazione nell’agent:
UserParameter=bind.udp.check,/etc/zabbix/dns_udp_check
Codice sorgente del comando:
int main()
{
setuid(0);
system("netstat -tulpn | grep named | grep 254:53| grep udp | wc -l");
return 0;
}
4. Monitoraggio DNS server autoritativo: Esito delle query inoltrate al server:
o Success;
Riga di configurazione nell’agent:
UserParameter=named.success,/etc/zabbix/zabbix-binds
Codice sorgente del comando:
int main()
{
setuid(0);
system("rm -f /var/cache/bind/named.stats");
setuid(0);
system("rndc stats");
setuid(0);
system("grep "successful" /var/cache/bind/named.stats| awk {'print
$1'}");
return 0;
}
o Recursion;
Riga di configurazione nell’agent:
67
UserParameter=named.recursion,grep "recursion"
/var/cache/bind/named.stats | awk {'print $1'}
o Failure;
Riga di configurazione nell’agent:
UserParameter=named.failure,grep "queries resulted in SERVFAIL"
/var/cache/bind/named.stats | awk {'print $1'}
o Referral;
Riga di configurazione nell’agent:
UserParameter=named.referral,grep "non authoritative"
/var/cache/bind/named.stats| awk {'print $1'}
o NXDomain;
Riga di configurazione nell’agent:
UserParameter=named.nxdomain,grep "queries resulted in NXDOMAIN"
/var/cache/bind/named.stats | awk {'print $1'}
o NXrrset.
Riga di configurazione nell’agent:
UserParameter=named.nxrrset,grep "nxrrset"
/var/cache/bind/named.stats | awk {'print $1'}
5. Monitoraggio proxy server:
o Numero di client connessi (da template Squid);
Riga di configurazione dell’agent:
UserParameter=squid.clients,squidclient mgr:info|grep 'Number of
clients accessing cache:'|cut -d':' -f2| tr -d ' \t'
o Numero medio di richieste http al minuto (da template Squid);
Riga di configurazione dell’agent:
UserParameter=squid.avg_http_req_per_min,squidclient
mgr:info|grep 'Average HTTP requests per minute since
start:'|cut -d':' -f2| tr -d ' \t'
o Squid check: restituisce 1 in caso il servizio di proxy Squid sia attivo, 0 in caso
contrario.
Riga di configurazione dell’agent:
UserParameter=squid.check,/etc/zabbix/squid_check
68
Codice sorgente del comando:
int main()
{
setuid(0);
system("netstat -tulpn | grep squid | grep 3128 | wc -l");
return 0;
}
6. Ping interno con gli host Servers e Trust.
Righe di configurazione nell’agent:
UserParameter=servers.ping, ping servers -c 1 | grep received| awk
{'print $4'}
UserParameter=trust.ping, ping trust -c 1 | grep received| awk {'print
$4'}
Servers:
1. Apache server status;
Riga di configurazione dell’agent:
UserParameter=apache.status[*],wget -q -O /dev/null
“http://localhost/server-status?auto” && wget -q -O –
“http://localhost/server-status?auto” | awk ‘/$1: / {print $NF}’
2. MySQL status;
Riga di configurazione dell’agent:
UserParameter=mysql.ping,mysqladmin -uroot –p<password> ping|grep
alive|wc -l
3. Ping interno con Trust.
Riga di configurazione nell’agent:
UserParameter=trust.ping, ping trust -c 1 | grep received| awk {'print
$4'}
Zabbix Server:
1. Internet ping.
Riga di configurazione nell’agent:
UserParameter=internet.ping, ping 8.8.8.8 -c 1 | grep received| awk
{'print $4'}
DMZ – WWW, Publication, PublicSVN:
69
1. Apache server status. Analogo al precedente;
2. MySQL status (solo su WWW e Publication);
Riga di configurazione nell’agent:
UserParameter=check.mysql,/etc/zabbix/check_mysql
Codice sorgente del comando:
int main()
{
setuid(0);
system("netstat -tulpn | grep mysqld | wc -l");
return 0;
}
3. Spazio su disco occupato e libero.
Righe di configurazione nell’agent:
UserParameter=disk.used,df | grep /dev/sda5 | awk {'print $3'}
UserParameter=disk.ava,df | grep /dev/sda5 | awk {'print $4'}
70