Old:Nagios: monitorare server e servizi

Nagios (Home Page) è uno strumento molto usato ed utilissimo per il monitoraggio di server e servizi. All'inizio, per molti utenti, è un po' complicato da configurare, ma dopo aver capito il funzionamento risulterà semplice, potente e versatile, attributi necessari per questo genere di strumenti.

Installazione

La macchina su cui verrà installato Nagios è un Debian Stable (Etch). Installeremo la versione 2 di Nagios, con i relativi pacchetti per avere un maggior numero di plugin e immagini (vedremo dopo come usarle).

Per installare nagios è sufficiente un:

#  apt-get install nagios2 nagios2-common nagios-plugins nagios-images nagios-plugins-basic  nagios-plugins-standard 

Dopo aver scaricato (sono circa 3.5Mb) ed installato nagios provvediamo all'installazione di un web server (necessario per consultare la comoda web-interface); la mia scelta è ricaduta su apache2, anche perchè il server in questione ospiterà applicazioni scritte in php. Procediamo ad installare apache2 con:

# apt-get install apache2 libapache2-mod-php5


Configurazione

Apache

Al momento dell'installazione viene creato in modo automatico il file /etc/apache2/conf.d/nagios2.conf (il file è, a tutti gli effetti, un link simbolico al file /etc/nagios2/apache2.conf) con il seguente contenuto:

# apache configuration for nagios 2.x
# note to users of nagios 1.x:
#	throughout this file are commented out sections which preserve
#	backwards compatibility with bookmarks/config for nagios 1.x.  simply
#	look for lines following "nagios 1.x:" comments.

ScriptAlias /cgi-bin/nagios2 /usr/lib/cgi-bin/nagios2
ScriptAlias /nagios2/cgi-bin /usr/lib/cgi-bin/nagios2
# nagios 1.x:
#ScriptAlias /cgi-bin/nagios /usr/lib/cgi-bin/nagios2
#ScriptAlias /nagios/cgi-bin /usr/lib/cgi-bin/nagios2

# Where the HTML pages live
Alias /nagios2 /usr/share/nagios2/htdocs
# nagios 1.x:
#Alias /nagios /usr/share/nagios2/htdocs

<DirectoryMatch (/usr/share/nagios2/htdocs|/usr/lib/cgi-bin/nagios2)>
	Options FollowSymLinks

	DirectoryIndex index.html

	AllowOverride AuthConfig
	Order Allow,Deny
	Allow From All

	AuthName "Nagios Access"
	AuthType Basic
	AuthUserFile /etc/nagios2/htpasswd.users
	# nagios 1.x:
	#AuthUserFile /etc/nagios/htpasswd.users
	require valid-user
</DirectoryMatch>

# Where the stylesheets (config files) reside
#Alias /nagios2/stylesheets /etc/nagios2/stylesheets
# nagios 1.x:
#Alias /nagios/stylesheets /etc/nagios2/stylesheets

# Enable this ScriptAlias if you want to enable the grouplist patch.
# See http://apan.sourceforge.net/download.html for more info
# It allows you to see a clickable list of all hostgroups in the
# left pane of the Nagios web interface
# XXX This is not tested for nagios 2.x use at your own peril
#ScriptAlias /nagios2/side.html /usr/lib/cgi-bin/nagios2/grouplist.cgi
# nagios 1.x:
#ScriptAlias /nagios/side.html /usr/lib/cgi-bin/nagios2/grouplist.cgi

Il file contiene una bozza di configurazione per nagios che permette di raggiungere il servizio digitando, semplicemente http://IP/nagios2/. Questo sistema a me, personalmente, non piace, in quanto nagios sarebbe accessibile da qualsiasi sito ospitato sulla macchina, semplicemente digitando http://www.sito.it/nagios2/, non molto sicuro e pulito.

Creeremo, quindi, un sottodominio dedicato a nagios, modificando il file nel seguente modo:


<VirtualHost *:80>
    ServerAdmin root@knio.it
#    DocumentRoot /var/www/nagios/
    ServerName nagios.knio.it

    ErrorLog /var/log/apache2/nagios.knio.it_error.log
    CustomLog /var/log/apache2/nagios.knio.it_access.log combined

     <Directory />
         AllowOverride All
         Options +Multiviews
         Options Indexes Includes FollowSymLinks MultiViews
         DirectoryIndex index index.html
     </Directory>

    ScriptAlias /cgi-bin/nagios2 /usr/lib/cgi-bin/nagios2
    ScriptAlias /nagios2/cgi-bin /usr/lib/cgi-bin/nagios2

    
    #Alias /nagios2/stylesheets /etc/nagios2/stylesheets
    Alias /nagios2 /usr/share/nagios2/htdocs
    # Enable this ScriptAlias if you want to enable the grouplist patch.
    # See http://apan.sourceforge.net/download.html for more info
    # It allows you to see a clickable list of all hostgroups in the
    # left pane of the Nagios web interface
    # XXX This is not tested for nagios 2.x use at your own peril
    #ScriptAlias /nagios2/side.html /usr/lib/cgi-bin/nagios2/grouplist.cgi
    <DirectoryMatch (/usr/share/nagios2/htdocs|/usr/lib/cgi-bin/nagios2)>
	Options FollowSymLinks
	DirectoryIndex index.html
	AllowOverride AuthConfig
	Order Allow,Deny
	Allow From All
	AuthName "Nagios Access"
	AuthType Basic
	AuthUserFile /etc/nagios2/htpasswd.users
	require valid-user
    </DirectoryMatch>
</VirtualHost>

Creiamo la Root Directory per questo sito con:

# mkdir  /var/www/nagios
# chown -R www-data:www-data /var/www/nagios/
# touch /var/www/nagios/index.html

la directory conterrà un file index.html vuoto, in questo file potremmo mettere o una pagina di benvenuto oppure un redirect alla directory contenente l'applicativo, a piacere.

Ora manca solo una cosa da fare: aggiungere l'utente per l'accesso a nagios (operazione obbligatoria, pena un errore di tipo 500 quando si tenta di accedere all'applicazione).

Per aggiungere l'utente usiamo il comando htpasswd:

# htpasswd  -c  /etc/nagios2/htpasswd.users nagiosadmin

alla richiesta di password, inseriamo una password a nostro piacimento.

Ora possiamo testare la configurazione, ma prima è necessario riavviare apache per rendere effettive le modifiche che abbiamo effettuato:

# /etc/init.d/apache2 restart

Collegandosi alla pagina http://nagios.knio.it/nagios2/ ci verrà chiesto username/password per accedere a nagios, dopodichè ci verrà mostrata la schermata di default.

Nagios

Introduzione alla configurazione

La configurazione di nagios è situato, come da FHS in /etc/nagios2/. All'interno di questa directory sono presenti i seguenti file (e directory):

cgi.cfg
il file contiene la configurazione dell'interfaccia web di nagios (quindi i percorsi dove trovare i file di configurazione ed alcuni comportamenti base; la configurazione dei permessi degli utenti e perfino i suoni da riprodurre in caso di problemi)
commands.cfg
contiene la configurazione dei comandi eseguibili da nagios: check, notifiche ed altri
conf.d
una directory che ha lo scopo di raccogliere i file di configurazione di tutti i vari host monitorati da nagios
htpasswd.users
contiene (come abbiamo visto prima) le chiavi di accesso di tutti gli utenti che possono accedere all'interfaccia web di nagios (i permessi, per questi utenti, sono definiti in cgi.cfg)
nagios.cfg
contiene la configurazione vera e propria del demone di nagios, la configurazione di default è corretta nella maggior parte dei casi
resource.cfg
in questa guida non lo modificheremo
stylesheets
directory per inserire i fogli di stile personalizzati (in questa guida non li useremo)

Come gestire al meglio i file di configurazione

Anche se la struttura dei file di configurazione è semplice, ci vuole molto poco a renderla una vera e propria accozzaglia di file. Ci sono varie scuole di pensiero su come gestire i file.

La prima è quella di inserire, all'interno della directory conf.d/ un file per ogni host, raggruppando, poi, gli host tramite gli hostgroup. La tecnica è valida e funzionale, a meno che non ci si trovi a gestire un numero eccessivo di host.

La seconda tecnica, è quella di creare tante directory quante sono i segmenti della rete, così da racchiudere i file di configurazione in directory meno popolate, così da rendere più facilmente individuabile un file.

Personalmente trovo più comodo gestire la prima, con la seguente convenzione:

  • ogni file ha la forma type-name.cfg dove type rappresenta la tipologia del file di configurazione (host per un server, switch per uno switch di rete, router per un router, e così via...) e dove name è il nome univoco associato alla macchina (e usato anche all'interno di Nagios).
  • i file contenenti i gruppi, le definizioni dei periodi e simili hanno una struttura type.cfg dove type può essere:
    • contacts: per le definizioni dei contatti
    • timeperiods: per le definizioni dei periodi
    • extinfo: per le definizioni delle informazioni aggiuntive
    • hostgroups: per la definizione dei gruppi di host
    • services: per la definizione dei gruppi di servizi

Un'accortezza da adottare, inoltre, quando si modifica un file di configurazione è quella di effettuare un check di correttezza tramite il comando:

nagios -v /etc/nagios2/nagios.conf

In questo modo si eviteranno downtime e si sarà sicuri che nagios ripartirà senza problemi (almeno legati alla sintassi dei file di configurazione...).

Gli Host

Tramite gli host è possibile definire i pc, server, switch e tutte le altre apparecchiature presenti nella rete da monitorare. Saranno poi i servizi a determinare cosa monitorare effettivamente.

La definizione classica e minimale di un host è la seguente

define host{
   use         generic-host
   host_name   serverino
   alias       Server di Produzione
   address     192.168.0.15
}

I parametri della definizione sono i seguenti:

use
permette di specificare un template da utilizzare all'interno del nostro host. L'utilizzo di un template permette di minimizzare i parametri necessari da passare ad un host. Il template che usiamo, per ora, è generic-host che è quello fornito di default in Debian. In seguito provvederemo a creare dei template che permetteranno uan suddivisione degli host in modo semplice ed immediato.
host_name
l'hostname dell'host. Deve essere univoco, in quanto viene utilizzato all'interno di Nagios come nome univoco di un host. è buona pratica utilizzare l'hostname della macchina, in quanto permetterà, in seguito, di identificarla più facilmente. In caso di switch od altri componenti conviene identificarli nel seguente modo: switch-dmz, firewall-dmz, etc...
alias
rappresenta il nome comune dell'host.
address
l'indirizzo IP dell'host. Deve essere inserito solo l'indirizzo Primario, e non una lista di indirizzi! Se si vogliono monitorare più indirizzi IP o più servizi legati a più indirizzi IP, sarà opportuno o definire un altro host (non molto corretto) oppure aggiungere servizi in cui viene indicato, come parametro, l'indirizzo IP secondario.

Oltre a quelli specificati è possibile aggiungere questi parametri (per quelli utilizzati nel template rimando al sottocapitolo dedicato):

parents <host_names>
permette di indicare, tramite un elenco di host separati da virgola, i "parenti" di quell'host (ad esempio switch, gateway, ecc). Utile per la rappresentazione grafica della struttura della rete
hostgroups <hostgroup_names>
permette di specificare i gruppi, sempre separati da virgola, a cui appartiene l'host.

Come convenzione per la creazione di un host creeremo un file col formato /etc/nagios2/conf.d/hosts/hostname.cfg dove hostname va sostituito con l'hostname dell'host definito.

I Servizi

I servizi vengono utilizzati per definire un controllo su un servizio presente su un determinato host. Possono essere associati ad un determinato host (utile per controlli specifici) oppure ad un hostgroup (utile per controlli generici o comunque monitoraggio di servizi standard).

Un servizio ha, normalmente, la seguente struttura:

define service{
   use                   generic-service
   host_name             localhost
   service_description   Disk Space
   check_command         check_all_disks!20%!10%
}

Dove vengono usati i seguenti parametri:

use <service-template>
indica il template da utilizzare. Il template contiene tutti i parametri necessari per la configurazione del servizio. In caso di necessità, comunque, è possibile sovrascrivere un parametro presente nel template semplicemente ridefinendolo all'interno del servizio.
host_name <hostname>
l'hostname specificato nella configurazione dell'host di cui si vuole monitorare il servizio
service_description <description>
la descrizione umana del servizio
check_command <command>
il comando da utilizzare per eseguire il controllo del servizio.

L'esempio sopra riportato associa il servizio ad un determinato host, ma è possibile associarlo ad un hostgroup, sostituendo la voce host_name con hostgroup_name.

Per i servizi verrà adottata la seguente convenzione:

  • se il servizio è dedicato ad un singolo host, viene inserito all'interno del file di configurazione dell'host
  • se il servizio è dedicato ad un hostgroup, invece, verrà inserito all'interno del file di definizione dell' hostgroup.

I Comandi

Utilizzare quelli esistenti

Creare nuovi comandi

I Gruppi

I Gruppi di Servizi

I Contatti

I Timeperiod

Le notifiche

Notifiche via e-mail

Notifiche via SMS (vodafone)

Notifiche via SMS (gateway)

Varie

Nagios Checker

Nagios Checker (Home Page) è una comoda estensione per Firefox che permette di monitorare, direttamente dal browser, lo stato delle nostre macchine. In caso di problemi verrà mostrato un avviso (in rosso) e verrà riprodotto un suono di allarme. Tramite l'estensione sarà possibile, inoltre, accedere direttamente alla pagina dell'host (o del servizio) che danno problemi per approfondire. Un must!

FAQ

Come posso aggiungere un altro utente a Nagios?

Per aggiungere un nuovo utente è necessario effettuare due passi:

1) creazione dell'account all'interno del file /etc/nagios2/htpasswd.users

# htpasswd /etc/nagios2/htpasswd.users nomeutente

2) Inserire l'utente appena creato all'interno della configurazione di Nagios. Per fare questo bisogna modificare il file /etc/nagios2/cgi.cfg aggiungendo l'utente appena creato alle seguenti direttive (in base ai permessi che si vogliono dare al nuovo utente):

authorized_for_system_information=nagiosadmin
authorized_for_configuration_information=nagiosadmin
authorized_for_system_commands=nagiosadmin
authorized_for_all_services=nagiosadmin
authorized_for_all_hosts=nagiosadmin
#authorized_for_all_services=nagiosadmin,guest
#authorized_for_all_hosts=nagiosadmin,guest
authorized_for_all_service_commands=nagiosadmin
authorized_for_all_host_commands=nagiosadmin

Dopo le varie modifiche è necessario ricaricare la configurazione di nagios con un

# /etc/init.d/nagios2 reload