Costruirsi un sistema di monitoraggio "casalingo" con Nagios – parte 2
Leggi la prima parte della guida
In questa seconda parte della guida illustrerò alcune configurazioni di base per i check di Nagios e l’uso dell’addon NRPE per check locali su sistemi remoti.
La struttura
In questa guida prenderò in considerazione la struttura qui si seguito che permette di illustrare vari tipi di configurazione: Una panoramica sugli host e i servizi:- Host A, server Linux con:
- Server HTTP Apache
- VMWare Server con una macchina virtuale E con un server Zimbra
- Host B, server Linux con:
- Server HTTP Apache
- Server MySQL
Negli esempi successivi gli elementi A, C ed E saranno del cliente Company A (dominio company-a.com) e B e D saranno del cliente Company B con dominio company-b.com. I nomi host saranno i seguenti:
- A => web.company-a.com
- C (macchina virtuale) => mail.company-a.com
- B => web.company-b.com
Organizzazione dei file
Una volta installato Nagios seguendo la prima parte della guida, troverete tutte le configurazioni in /usr/local/nagios/etc. Il file che comanda è nagios.cfg il quale poi richiama tutti gli altri. àˆ quindi possibile, e consigliabile, creare una gerarchia di file che possa poi più facilmente permettere di gestire tutte le configurazioni (senza perdersi per strada i vari pezzi). Nel file nagios.cfg ci sono due direttive inerenti questo aspetto e sono cfg_file e cfg_dir. La prima indica direttamente un file da cui leggere ulteriori configurazioni, la seconda indica intere directory da cui saranno inclusi tutti i file che terminano con .cfg. Io consiglio di intervenire usando questa seconda direttiva, le cartelle che ho creato sono:cfg_dir=/usr/local/nagios/etc/personalized_objects cfg_dir=/usr/local/nagios/etc/servers cfg_dir=/usr/local/nagios/etc/groupsOltre alle due cartelle con le configurazioni dei server e dei gruppi, ho aggiunto una cartella in cui inserirò i template personalizzati, ad esempio con timeperiods o contact groups diversi da quelli standard.
Gruppi di host e servizi
àˆ possibile definire dei gruppi di host (ad esempio a seconda dell’azienda di appartenenza o del tipo di hardware) e dei gruppi di servizi (server di posta, server web, ecc.). Personalmente inserisco queste configurazioni nella cartella groups.Esempi di configurazione sono i seguenti:
define hostgroup{ hostgroup_name companyA-servers alias          Company A Servers members        mail.company-a.com,web.company-a.com } define hostgroup{ hostgroup_name companyB-servers alias          Company B Servers members        web.company-b.com } define servicegroup{ servicegroup_name web-servers alias Web Servers members web.company-a.com,HTTP,web.company-b.com,HTTP }In entrambi i casi gli host indicati in members devono ricalcare il nome con cui quegli host sono definiti (attributo host_name). Nel caso dei servizi, oltre al nome dell’host, deve essere indicato il nome del servizio (anche in questo caso deve essere uguale a quello inserito in service_description).
Definizione degli host
Iniziamo con la configurazione dei server. I file web.company-a.com.cfg, web.company-b.com.cfg e mail.company-a.com.cfg verranno creati nella cartella servers. Non c’è molto da spiegare, inserisco dei commenti direttamente nelle configurazioni:web.company-a.com.cfg
define host { use            linux-server ; Template da cui ereditare host_name      web.company-a.com ; L’host name è ciò che viene usato per identificare l’host negli altri file alias          CompanyA Web Server address        1.2.3.4 hostgroups     comapanyA-servers ; Come in hostgroup, tale configurazione può essere alternativa o in aggiunta }web.company-b.com.cfg
define host { use            linux-server host_name      web.company-b.com alias          CompanyB Web Server address        1.2.3.5 hostgroups     comapanyB-servers }mail.company-a.com.cfg
define host { use            linux-server host_name      mail.company-a.com alias          CompanyA Web Server address        1.2.3.6 hostgroups     comapanyA-servers parents        web.company-a.com ; L’host da cui questo host dipende }
Definizione dei servizi
La definizione dei servizi è direttamente collegata ai plugin, ovvero usano questi ultimi per effettuare i check. In verità il valore dell’attributo check_command, anche se in genere ricalca il nome del plugin (i plugin sono nella cartella libexec), non lo indica direttamente ma ha una corrispondenza nel valore dell’attributo command_name nella definizione di un comando (file etc/objects/commands.cfg).mail.company-a.com.cfg
define service { use                    generic-service host_name              mail.company-a.com service_description    SMTP check_command          check_smtp!-t 5 } define service { use                    generic-service host_name              mail.company-a.com service_description    IMAP check_command          check_imap!-t 5 } define service { use                    generic-service host_name              mail.company-a.com service_description    POP3 check_command          check_pop!-t 5 }Nella direttiva check_command viene indicato il tipo di comando da eseguire. Dopo il punto esclamativo vengono indicati gli argomenti. Se date uno sguardo a etc/objects/commands.cfg vedrete che gli argomenti vengono passati al plugin con $ARG1$, $ARG2$, ecc. In alcuni è presente soltanto un argomento, quindi nella definizione del servizio, dopo il punto esclamativo, devono essere indicati tutti gli argomenti (tipo ./check_dummy -t pippo -x pluto) mentre in altri comandi sono presenti più argomenti, spesso associati ad una specifica opzione (tipo ./check_dummy -t $ARG1$ -x $ARG2$). Nella definizione del servizio, più argomenti possono essere indicati con più punti esclamativi (tipo check_dummy!pippo!pluto). Per avere più informazioni su un plugin lanciatelo con libexec/check_dummy –help.
Un esempio di check un po’ più complesso può essere, ad esempio, quello necessario per controllare se l’interfaccia di amministrazione di Zimbra sta girando correttamente (HTTPS sulla porta 7071):
mail.company-a.com.cfg
define service{ use                            generic-service host_name                      mail.comapany-a.com service_description            ZimbraAdmin check_command                  check_http!“-H mail.company-a.com -p 7071 -w 5 -c 15 –ssl” }Com’è facile intuire, con check_http è possibile quindi monitorare ogni singolo sito presente su un server web.
Ecco gli altri file necessari per la nostra configurazione:
web.company-a.com.cfg
define service{ use                            generic-service host_name                      web.company-a.com service_description            HTTP check_command                  check_http ; Semplice check sulla porta 80 }
define service{ use                            generic-service host_name                      web.company-a.com service_description            VMWareAdmin check_command                  check_http!“-H web.company-a.com -p 8333 -w 5 -c 15 –ssl” }web.company-b.com.cfg
define service{ use                            generic-service host_name                      web.company-b.com service_description            HTTP check_command                  check_http }
NRPE
L’ultima cosa che rimane da controllare è lo stato del server MySQL. Dato che il servizio risponde soltanto sull’interfaccia locale non è possibile controllarne direttamente lo stato dal server Nagios. L’addon NRPE fa proprio questo: installato sulla macchina da controllare, esegue dei check locali quando interrogato da Nagios.Il plugin da usare sul server è check_nrpe e l’argomento da passargli è il nome del check definito nel client, il quale a sua volta dovrà associare questo nome ad un check locale (quindi sul client dobbiamo installare i plugin).Su entrambe le macchine va compilato l’addon:
tar xzf nrpe-2.12.tar.gz cd nrpe-2.12/ ./configure –enable-ssl make allA questo punto l’installazione tra host e client differisce. Per l’installazione nel client dei plugin seguite la prima parte della guida.
Host
make install-plugine quindi bisogna creare il template del comando:
commands.cfg
define command { command_name   check_nrpe command_line   $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ }Client
Se non è installato, installate xinetd:
apt-get install xinetdInstallate quindi il demone
make install-daemon make install-daemon-config make install-xinetdAggiungete NRPE al file /etc/services:
nrpe 5666/tcp # NRPEAggiungete l’ip del server Nagios al file /etc/xinetd.d/nrpe (in questo caso un fittizio 4.3.2.1):
only_from = 127.0.0.1 4.3.2.1Infine riavviate il server xinetd e controllate che NRPE sia in ascolto:
~# /etc/init.d/xinetd restart ~# netstat -at | grep nrpe tcp       0     0 *:nrpe                 *:*                    LISTENA questo punto si può testare il servizio in locale con:
~# /usr/local/nagios/libexec/check_nrpe -H localhost NRPE v2.12Controllare MySQL
Arriviamo al nostro obiettivo: controllare che il server MySQL stia correttamente girando. Creiamo un utente MySQL non privilegiato:
mysql> CREATE USER ‘nagiosCheck’@‘localhost’ IDENTIFIED BY ‘some_pass’;Il check, lanciato da linea di comando, sarà il seguente:
~# /usr/local/nagios/libexec/check_mysql -u nagiosCheck -p some_pass Uptime: 1061012Â Threads: 2Â Questions: 192277Â Slow queries: 0Â Opens: 198Â Flush tables: 1Â Open tables: 64Â Queries per second avg: 0.181Inseriamo quindi tale check in /usr/local/nagios/etc/nrpe.cfg:
command[check_mysql]=/usr/local/nagios/libexec/check_mysql -u nagiosCheck -p some_passDa notare che nel server Nagios il nome dell’argomento da passare a check_nrpe sarà check_mysql come definito tra le parentesi quadre. A questo punto dal server Nagios si può testare il check remoto:
~# /usr/local/nagios/libexec/check_nrpe -H tomcat.mydomain.com -c check_mysql Uptime: 1061534Â Threads: 2Â Questions: 192280Â Slow queries: 0Â Opens: 198Â Flush tables: 1Â Open tables: 64Â Queries per second avg: 0.181Se è tutto ok non resta che inserirlo tra i servizi dell’host B:
web.company-b.com.cfg
define service{ use                            generic-service host_name                      web.company-b.com service_description            MySQL check_command                  check_nrpe!check_mysql }E questo conclude la configurazione della nostra rete di test. Nella prossima puntata spiegherò come configurare dei server slave per effettuare check passivi, necessari, ad esempio, in configurazioni di rete complesse in cui il server master non può direttamente raggiungere gli host da controllare (se l’host da controllare è all’interno di una LAN, per dirne una).