Project

General

Profile

MonitorIcingaEtAl » History » Version 9

Simone Piccardi, 04/18/2013 03:36 PM

1 1 Simone Piccardi
h1. Monitoraggio sistemi con Icinga & C.
2 1 Simone Piccardi
3 5 Simone Piccardi
h2. Installazione base
4 5 Simone Piccardi
5 5 Simone Piccardi
_Icinga_ (http://www.icinga.org) è un fork di Nagios sviluppato in maniera aperta, che presenta numerosi miglioramenti e soprattutto una interfaccia utente nettamente più elaborata. Le presenti istruzioni fanno riferimento all'installazione su una Debian Squeeze utilizzando le versione più recenti disponibili nel repository di @backports@ pertanto il primo passo da fare sarà quello di abilitare questi ultimi, aggiungendo a @/etc/apt/sources.list@ la riga:
6 5 Simone Piccardi
7 1 Simone Piccardi
<pre>
8 1 Simone Piccardi
deb http://backports.debian.org/debian-backports squeeze-backports main
9 1 Simone Piccardi
</pre>
10 1 Simone Piccardi
11 1 Simone Piccardi
il pacchetto è suddiviso in due parti, il _"core"_ che reimplementa le funzionalità di Nagios, e la nuova interfaccia web, pertanto installeremo entrambe con:
12 1 Simone Piccardi
13 1 Simone Piccardi
<pre>
14 1 Simone Piccardi
apt-get install -t squeeze-backports icinga icinga-web
15 1 Simone Piccardi
</pre>
16 1 Simone Piccardi
17 5 Simone Piccardi
Il sistema di @debconf@ chiederà se abilitare o meno l'uso di comandi esterni con _Icinga_, questo consente, attraverso l'accesso in scrittura della _pipe_ di controllo posta in @/var/lib/icinga/rw/@ di dare al web server la possibilità di utilizzare l'interfaccia dei comandi CGI, e servirà anche per l'accesso alla stessa da parte di altri programmi di ausilio, pertanto è opportuno attivarla rispetto alla scelta di default. 
18 1 Simone Piccardi
19 5 Simone Piccardi
L'interfaccia di @debconf@ chiede anche (qualora si usino diverse alternative) per quale web server generare la configurazione (si lasci il default di apache2), di configurare l'accesso e la creazione di vari database per i quali occorre, usando @dbconfig-common@, la password di root del database (si assume l'uso di MySQL su localhost) e le password per gli utenti di amministrazione, @icingaadmin@ per _Icinga_ e @root@ per l'interfaccia Web.  Viene altresì richiesta la configurazione del database di appoggio per lo storico dei dati (@icinga-idoutils@), per il quale di nuovo occorre la password di root del database.
20 2 Simone Piccardi
21 2 Simone Piccardi
Qualora la configurazione di @icinga-web@ fallisca in fase di configurazione come capitato a me, occorrerà impostare a mano la password dell'utente root nel relativo database, per questo si dovranno eseguire i seguenti comandi (estratti dallo script di post-installazione):
22 2 Simone Piccardi
23 2 Simone Piccardi
<pre>
24 2 Simone Piccardi
salt=$(php5 -r 'echo hash("sha256", uniqid("root_", mt_rand()));')
25 2 Simone Piccardi
export SALT="$salt"
26 2 Simone Piccardi
export PW="passwordlungaecomplicata"
27 2 Simone Piccardi
pwhash=$(php5 -r 'echo hash_hmac("sha256", getenv("PW"), getenv("SALT"));')
28 2 Simone Piccardi
salt_e=${salt/\'/\\\'}
29 2 Simone Piccardi
pwhash_e=${pwhash/\'/\\\'}
30 2 Simone Piccardi
query="UPDATE nsm_user SET user_password='""$pwhash_e""', user_salt = '""$salt_e""', user_modified = NOW() WHERE user_name = 'root';"
31 2 Simone Piccardi
echo $query | mysql -u icinga_web -p icinga_web
32 2 Simone Piccardi
</pre>
33 2 Simone Piccardi
34 2 Simone Piccardi
fornendo dopo l'ultimo comando la password impostata per il database di @icinga-web@.
35 4 Simone Piccardi
36 3 Simone Piccardi
Una delle caratteristiche di @icinga@ è la possibilità di utilizzare un database per lo stoccaggio dei dati, le estensioni per l'utilizzo di questa modalità di gestione dei dati sono fornite dal pacchetto @icinga-idoutils@ (necessario nel caso si voglia utilizzare la nuova interfaccia di @icinga-web@, che lo richiede come dipendenza e fa configurare il relativo accesso al database). Per poterlo utilizzare deve essere esplicitamente abilitato l'avvio del demone @ido2db@ modificando la seguente riga in @/etc/default/icinga@:
37 3 Simone Piccardi
38 3 Simone Piccardi
<pre>
39 1 Simone Piccardi
# start ido2db daemon (no/yes)
40 3 Simone Piccardi
IDO2DB=yes
41 3 Simone Piccardi
</pre>
42 3 Simone Piccardi
43 5 Simone Piccardi
inoltre deve essere attivato il modulo di gestione da parte di _Icinga_, questo deve essere fatto attraverso l'uso del file di configurazione distribuito con @icinga-idoutils@, pertanto occorrerà copiare:
44 1 Simone Piccardi
45 1 Simone Piccardi
<pre>
46 4 Simone Piccardi
cp /usr/share/doc/icinga-idoutils/examples/idoutils.cfg-sample /etc/icinga/modules/idoutils.cfg
47 4 Simone Piccardi
</pre>
48 4 Simone Piccardi
49 4 Simone Piccardi
una volta fatto questo si riavviino i relativi servizi con:
50 4 Simone Piccardi
51 1 Simone Piccardi
<pre>
52 1 Simone Piccardi
service ido2db restart
53 1 Simone Piccardi
service icinga restart
54 1 Simone Piccardi
</pre>
55 5 Simone Piccardi
56 5 Simone Piccardi
e si potrà verificare il funzionamento anche della nuova interfaccia web (dando per scontato di aver creato un opportuno virtual host sotto SSL),  andando sull'indirizzo @https://icinga.miosito.it/icinga-web/@. 
57 5 Simone Piccardi
58 5 Simone Piccardi
Qualora i dati di monitoraggio siano presenti, ma risulti marcata come "_DOWN_" l'instanza di @icinga@ nel quadro riassuntivo, si verifichi che la _timezone_ di sistema in @/etc/timezone@, quella di PHP nella variabile @date.timezone@ in @/etc/php5/apache2/php.ini@ siano coerenti, nel caso si provveda anche al riavvio di MySQL per fargli vedere i valori corretti.
59 5 Simone Piccardi
60 5 Simone Piccardi
61 5 Simone Piccardi
h2. Grafici delle risorse con _PNP4Nagios_
62 5 Simone Piccardi
63 5 Simone Piccardi
Uno degli aspetti più rilevanti di un sistema di monitoraggio è quello che consente di mantenere uno storico del consumo delle risorse che consente di tenerne sotto controllo l'evoluzione. A questo scopo è disponibile _PHP4Nagios_, che supporta anche una opportuna integrazione con @icinga@; per installarlo è sufficiente eseguire il comando:
64 5 Simone Piccardi
65 5 Simone Piccardi
<pre>
66 5 Simone Piccardi
apt-get install -t squeeze-backports icinga-web-pnp
67 5 Simone Piccardi
</pre>
68 5 Simone Piccardi
69 5 Simone Piccardi
che installa tutto il necessario nelle dipendenze, una volta fatto questo però vanno fatte alcune correzioni alle configurazioni del pacchetto che sono fatte per Nagios, in particolare occorre modificare @/etc/apache2/conf.d/pnp4nagios.conf@ correggendo le modalità di autenticazione con:
70 5 Simone Piccardi
71 5 Simone Piccardi
<pre>
72 5 Simone Piccardi
AuthName "Iconga Access"
73 5 Simone Piccardi
AuthUserFile /etc/icinga/htpasswd.users
74 5 Simone Piccardi
</pre>
75 5 Simone Piccardi
76 5 Simone Piccardi
in modo che corrispondano a quanto presente anche in @/etc/apache2/conf.d/icinga.conf@, e ci si ricordi di eseguire un reload di apache. 
77 5 Simone Piccardi
78 5 Simone Piccardi
Occorre poi correggere @/etc/pnp4nagios/config.php@ di nuovo per fagli usare i valori opportuni relativi ad _Icinga_, in particolare si dovranno modificare le seguenti linee:
79 5 Simone Piccardi
80 5 Simone Piccardi
<pre>
81 5 Simone Piccardi
...
82 5 Simone Piccardi
$conf['nagios_base'] = "/icinga/cgi-bin";
83 5 Simone Piccardi
...
84 5 Simone Piccardi
$conf['livestatus_socket'] = "unix:/var/lib/icinga/rw/live";
85 5 Simone Piccardi
...
86 9 Simone Piccardi
$conf['template_dirs'][] = '/usr/share/check_mk/pnp-templates';
87 9 Simone Piccardi
...
88 5 Simone Piccardi
</pre>
89 1 Simone Piccardi
90 9 Simone Piccardi
Dove le ultime righe attengono all'uso di funzionalità fornite con _Check_MK_, su cui torneremo più avanti.
91 1 Simone Piccardi
92 7 Simone Piccardi
Per la generazione dei grafici occorre che _Icinga_ generi i relativi dati, _PHP4Nagios_ prevede diverse modalità per l'accesso agli stessi, la più efficiente è quella dell'uso di un apposito demone, @npcd@ che si appoggia ad un modulo di _Icinga_. In realtà il demone può essere anche usato da solo, facendo generare i dati ad _Icinga_ nelle opportune directory. 
93 7 Simone Piccardi
94 7 Simone Piccardi
Anzitutto occorre attivare il demone @npcd@ in @/etc/default/npcd@ inserendo la riga:
95 7 Simone Piccardi
96 1 Simone Piccardi
<pre>
97 7 Simone Piccardi
# Should NPCD be started? ("yes" to enable)
98 7 Simone Piccardi
RUN="yes"
99 7 Simone Piccardi
</pre>
100 7 Simone Piccardi
101 7 Simone Piccardi
Il secondo passo è configurare _Icinga_, cosa che varia a seconda delle modalità scelte per generare i dati. Se si sceglie di usare quella consigliata attraverso il modulo @npcdmod.o@ occorrono due passaggi; il primo è quello di indicare ad _Icinga_ di generare i dati, inserendo in @/etc/icinga/icinga.cfg@ la riga:
102 7 Simone Piccardi
103 7 Simone Piccardi
<pre>
104 7 Simone Piccardi
process_performance_data=1
105 7 Simone Piccardi
</pre>
106 7 Simone Piccardi
107 7 Simone Piccardi
occorrerà poi abilitare il modulo inserendo in un file di configurazione (nel nostro caso @npcdmod.cfg@) nella directory @/etc/icinga/modules/@ con contenuto:
108 7 Simone Piccardi
109 7 Simone Piccardi
<pre>
110 7 Simone Piccardi
define module{
111 7 Simone Piccardi
        module_name    npcdmod
112 7 Simone Piccardi
        path           /usr/lib/pnp4nagios/npcdmod.o 
113 7 Simone Piccardi
        module_type    neb
114 7 Simone Piccardi
        args           config_file=/etc/pnp4nagios/npcd.cfg
115 7 Simone Piccardi
        }
116 7 Simone Piccardi
</pre>
117 7 Simone Piccardi
118 7 Simone Piccardi
119 8 Simone Piccardi
h2. Controllo con _Check_MK_
120 1 Simone Piccardi
121 1 Simone Piccardi
_Check_MK_ è programma che consente di gestire il monitoraggio centralizzato di diversi parametri da parte di _Icinga_ con una singola connessione ad un opportuno _agent_ da installare sulle singole macchine da porre sotto controllo. Il programma inoltre fornisce anche una serie di funzionalità di controllo ed autodiscovery dei servizi ed una interfaccia di controllo alternativa.  Per l'integrazione con _Icinga_ il primo passo è installare tutto il necessario sul server:
122 1 Simone Piccardi
123 8 Simone Piccardi
<pre>
124 9 Simone Piccardi
apt-get install -t squeeze-backports check-mk-server check-mk-config-icinga 
125 1 Simone Piccardi
</pre>
126 9 Simone Piccardi
127 9 Simone Piccardi
dove in particolare il secondo pacchetto installa tutti i file necessari ad integrare _Check_MK_ con _Icinga_.
128 9 Simone Piccardi
129 9 Simone Piccardi
La configurazione di base prevede che si inserisca la lista delle macchine da sottoporre a controllo nel file @/etc/check_mk/main.mk@, inizialmente ad esempio con qualcosa del tipo (la configurazione è l'assegnazione di una lista in python):
130 9 Simone Piccardi
131 9 Simone Piccardi
<pre>
132 9 Simone Piccardi
# Put your host names here
133 9 Simone Piccardi
# all_hosts = [ 'localhost' ]
134 9 Simone Piccardi
all_hosts = [  'localhost', 'www.fountainpen.it', ... ]
135 9 Simone Piccardi
</pre>
136 9 Simone Piccardi
137 9 Simone Piccardi
Si tenga presente che la semplice installazione _Check_MK_ di default non comporta nessun controllo, il programma infatti si collega agli _agent_ sulle macchine indicate nel precedente file di configurazione, e raccoglie gli eventuali dati disponibili, ma questi sono normalmente utilizzati soltanto all'interno del programma stesso, se si vogliono poter inserire i controlli dentro _Icinga_ occorre richiedere al programma la generazione degli opportuni file di configurazione. 
138 9 Simone Piccardi
139 9 Simone Piccardi
Le operazioni di controllo di _Check_MK_ vengono eseguite tramite il comando @check_mk@, questo consente di gestire le configurazioni di tutte le macchine controllate con _Check_MK_ creando un opportuno file di configurazione per _Icinga_ sotto @/etc/icinga/objects/check_mk/check_mk_objects.cfg@. Si può visualizzare l'elenco dei possibili controlli con  @check_mk -L@, mentre con @check_mk -I@, eventualmente seguito dall'indicazione di una macchina si può attivare la scoperta dei servizi disponibili per il controllo (il comando mostra solo quelli nuovi, se invece si usa @check_mk -II@ vengono cancellati quelli vecchi e ricreati solo quelli presenti).
140 9 Simone Piccardi
141 9 Simone Piccardi
In generale quello che server è lanciare @check_mk -R@ che esegue la generazione dei file di configurazione (nel caso @/etc/icinga/objects/check_mk/check_mk_objects.cfg@) e poi riavviare il servizio:
142 9 Simone Piccardi
143 9 Simone Piccardi
<pre>
144 9 Simone Piccardi
check_mk -R
145 9 Simone Piccardi
service icinga restart
146 9 Simone Piccardi
</pre>
147 9 Simone Piccardi
148 9 Simone Piccardi
149 9 Simone Piccardi
Per poter utilizzare le fuzionalità di _Check_MK_ è però necessario installare sulle macchine da mettere sotto controllo (compresa in genere quella su cui si è installato il server), lo script che esegue il compito di _agent_. Si tratta di un semplice script di shell che deve essere eseguito con @xinetd@, quest'ultimo però non viene installato automaticamente e deve essere esplicitamente installato:
150 9 Simone Piccardi
151 9 Simone Piccardi
<pre>
152 9 Simone Piccardi
apt-get install -t squeeze-backports check-mk-agent xinetd
153 9 Simone Piccardi
</pre>
154 9 Simone Piccardi
155 9 Simone Piccardi
inoltre dato che l'agent installa un file di configurazione per @xinetd@ in cui il servizio è disabilitato, è necessario modificare @/etc/xinetd.d/check_mk@ impostando: 
156 9 Simone Piccardi
157 9 Simone Piccardi
<pre>
158 9 Simone Piccardi
disable        = no
159 9 Simone Piccardi
</pre>
160 9 Simone Piccardi
161 9 Simone Piccardi
ed eventualmente aggiungere ulteriori direttive di controllo per bloccare gli accessi solo ai server autorizzati; ad esempio nel caso di installazione locale sul server stesso:
162 9 Simone Piccardi
163 9 Simone Piccardi
<pre>
164 9 Simone Piccardi
only_from      = 127.0.0.1
165 9 Simone Piccardi
</pre>
166 9 Simone Piccardi
167 9 Simone Piccardi
e si provveda a riavviare il servizio con:
168 9 Simone Piccardi
169 9 Simone Piccardi
<pre>
170 9 Simone Piccardi
service xinetd restart
171 9 Simone Piccardi
</pre>
172 9 Simone Piccardi
173 9 Simone Piccardi
Si tenga presente che se si installa l'agent sulla macchina stessa su cui gira _Icinga_ la configurazione di quest'ultimo già prevede un controllo eseguito su @localhost@ definito nel file @/etc/icinga/objects/localhost_icinga.cfg@, che andrà a confliggere con la configurazione creata da @check_mk -R@, pertanto si abbia cura di rimuovere detto file o usare un nome diverso per il localhost (ad esempio "127.0.0.1"). 
174 9 Simone Piccardi
175 1 Simone Piccardi
176 8 Simone Piccardi
L'uso dell'interfaccia web di _Check_MK_ si basa sull'utilizzo di ''livestatus'', una modalità di presentazione dei dati che consente una lettura più veloce ed efficente, cui abbiamo già accennato in precedenta. Questa comporta l'installazione del pacchetto relativo con:
177 8 Simone Piccardi
178 7 Simone Piccardi
<pre>
179 5 Simone Piccardi
apt-get install -t squeeze-backports check-mk-livestatus
180 5 Simone Piccardi
</pre>
181 5 Simone Piccardi
182 5 Simone Piccardi
ed una ulteriore configurazione di _Icinga_; questa può essere fatta usando la nuova funzionalità dei moduli (evitando quindi la direttiva @broker_module@) inserendo in un file (nel nostro caso @livestatus.cfg@) nella directory @/etc/icinga/modules/@ con contenuto:
183 5 Simone Piccardi
184 1 Simone Piccardi
<pre>
185 5 Simone Piccardi
define module{
186 5 Simone Piccardi
        module_name    mklivestatus
187 5 Simone Piccardi
        path           /usr/lib/check_mk/livestatus.o
188 5 Simone Piccardi
        module_type    neb
189 1 Simone Piccardi
        args           /var/lib/icinga/rw/live
190 5 Simone Piccardi
        }
191 5 Simone Piccardi
</pre>
192 8 Simone Piccardi
dove @/var/lib/icinga/rw/live@ che è il default usato da _Check_MK_.