_________________________________________________________________
TESI DI MASTER
Relatore:
Prof. Gennaro BOGGIA
Formando:
Francesco UNGOLO
_________________________________________________________________
2
Indice
Introduzione ............................................................................................................................ 5
3
Capitolo 3: Messa a punto del sistema di monitoring basato sul
software Zabbix ………………………………………………...………………… 25
Bibliografia ................................................................................................................................. 64
Appendice ................................................................................................................................... 65
4
Introduzione
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].
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:
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:
7
Fig. 1.1.1.2: rappresentazione a blocchi di un VMM di tipo 2
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 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].
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.
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.
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].
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.
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.
Un ulteriore vantaggio è l'aumento della disponibilità dei servizi erogati, in quanto si ottiene:
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;
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;
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
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;
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.
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.
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:
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.
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.
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.
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.
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:
• 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.
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:
Server=192.168.10.253
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.
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
28
Discover by proxy: indica se la ricerca vada effettuata o meno da proxy, nel caso
specifico viene direttamente effettuata da Zabbix Server;
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].
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 auto-
discovery impostate. Gli attributi di ogni azione sono così definiti:
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.
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.
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
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.
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.
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
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].
Dopo aver rilevato tutti gli host con la procedura della auto-discovery, bisogna impostarne i
parametri e le modalità di monitoraggio.
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.
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;
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.
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.
Se il comando da lanciare prevede l’autorizzazione di utente root per essere eseguito, bisogna:
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;
}
3) Modificarne i permessi:
/etc/zabbix/<nome_script>
37
UserParameter=<key>,/etc/zabbix/<nome_script>
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
1. Name: nome dell’item, che in questo caso fornisce la quantità di spazio occupata su
disco;
4. Host Interface: interfaccia per l’host selezionato, in questo caso indirizzo IP:porta;
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;
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)/(time-
prev_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:
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;
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):
40
o Squid check: restituisce 1 in caso il servizio di proxy Squid sia attivo, 0 in caso
contrario.
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.
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à.
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.
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;
- 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:
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;
Netservices:
Servers:
44
Zabbix Server:
3.5.4 Grafici
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
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.
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:
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:
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.
50
I campi visualizzati vengono così impostati:
In fig. 3.6.1.2, è mostrato l’inserimento di un testo semplice (Plain Text) in una cella.
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;
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.
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.
52
Fig. 3.6.1.4: Schermata “Service Graph”
53
Fig. 3.6.1.6: Schermata “Services status”
3.6.2 Mappe
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
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;
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 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);
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.
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:
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);
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.
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;
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.
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.
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à.
Reportistica avanzata.
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.
[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.
[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.
[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:
UserParameter=iptables.block,/etc/zabbix/iptables_drop
setuid(0);
return 0;
2. OpenVPN check.
UserParameter=ovpn.check,/etc/zabbix/ovpn_check
setuid(0);
return 0;
3. Internet ping.
65
Riga di configurazione nell’agent:
Netservices:
1. DHCP server check.
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;
}
UserParameter=bind.queries.in[*],curl http://localhost:8053/
2>/dev/null | xml2 | grep -A1 "/isc/bind/statistics/server/queries-
in/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
UserParameter=bind.tcp.check,/etc/zabbix/dns_tcp_check
66
Codice sorgente del comando:
int main()
setuid(0);
return 0;
UserParameter=bind.udp.check,/etc/zabbix/dns_udp_check
setuid(0);
return 0;
o Success;
UserParameter=named.success,/etc/zabbix/zabbix-binds
setuid(0);
system("rm -f /var/cache/bind/named.stats");
setuid(0);
system("rndc stats");
setuid(0);
return 0;
o Recursion;
67
UserParameter=named.recursion,grep "recursion"
/var/cache/bind/named.stats | awk {'print $1'}
o Failure;
o Referral;
o NXDomain;
o NXrrset.
UserParameter=named.nxrrset,grep "nxrrset"
/var/cache/bind/named.stats | awk {'print $1'}
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.
UserParameter=squid.check,/etc/zabbix/squid_check
68
Codice sorgente del comando:
int main()
setuid(0);
return 0;
Servers:
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;
Zabbix Server:
1. Internet ping.
69
1. Apache server status. Analogo al precedente;
UserParameter=check.mysql,/etc/zabbix/check_mysql
int main()
setuid(0);
return 0;
70