2. Installazione e configurazione di base

Prima di immergerci nei dettagli dell'installazione e configurazione di Nagios, diamo una rapida occhiata al layout della rete che andremo a monitorare. È una rete molto semplice e minimale, formata da:

Il nostro server di monitoraggio è una macchina critica dal punto di vista della sicurezza e non avrà bisogno di accedere direttamente ad Internet, quindi si troverà benissimo nella LAN interna.

La procedura di installazione di OpenBSD è documentata in dettaglio nelle FAQ ufficiali, quindi non ci soffermeremo su di essa. Nagios non ha esigenze particolari e un'installazione standard andrà benissimo: stando alla documentazione, si accontenta di una macchina con Linux (o altra variante di UNIX). Non suona poi così esigente, no?

2.1 Installazione dei package

L'installazione di Nagios richiede solo l'aggiunta di alcuni package:

La procedura di installazione creerà automaticamente l'utente e il gruppo con cui girerà il demone (_nagios). Il flavor chroot installerà Nagios all'interno della chroot di Apache, cioè con i CGI linkati staticamente e tutti i file di configurazione e di log all'interno della directory /var/www. A questo proposito, Nagios ha una struttura di directory particolare con cui conviene familiarizzare:

/var/www/nagios/
questa directory contiene le pagine HTML statiche per l'interfaccia web e la documentazione online;
/var/www/cgi-bin/nagios/
contiene le pagine CGI dinamiche dell'interfaccia web, che recuperano e visualizzano lo stato corrente degli oggetti monitorati;
/var/www/etc/nagios/
occorre mettere tutti i file di configurazione di Nagios in questa directory: a breve esamineremo questi file uno a uno;
/var/www/var/log/nagios/
questa è la directory in cui Nagios creerà i file di log, status e retention;
/var/www/var/log/nagios/archives/
I file di log di Nagios vengono periodicamente ruotati e spostati in questa directory;
/var/www/var/nagios/rw/
contiene l'external command file;
/usr/local/libexec/nagios/
contiene i plugin standard.

Come promemoria, il seguente schema, gentilmente offerto da Bren Smith, rappresenta visivamente la struttura delle directory di Nagios (clicca qui per ingrandire).

Directory structure

2.2 Configurazione

La configurazione di Nagios può sembrare piuttosto complicata a prima vista; perfino la documentazione avverte che Nagios è molto potente e flessibile, ma può richiedere parecchio lavoro per essere configurato esattamente come lo si vuole. Comunque, l'importante è non scoraggiarsi! Una volta capita la logica sottostante alla sua configurazione "orientata agli oggetti", non si può che apprezzare la flessibilità e la semplicità di Nagios. Per le prime prove, conviene partire dai file di configurazione di esempio contenuti nella directory /usr/local/share/examples/nagios/, modificandoli secondi le proprie esigenze.

La sintassi dei file di configurazione di Nagios segue alcune regole di base:

La configurazione comprende l'impostazione di parecchi parametri riguardanti il demone di monitoraggio, i CGI e, ovviamente, gli host e i servizi da monitorare. Tutte queste informazioni sono sparse fra vari file: esaminiamoli a turno.

2.2.1 Il file di configurazione principale

Il comportamento generale del demone Nagios è determinato dalle direttive all'interno del file di configurazione principale, /var/www/etc/nagios/nagios.cfg. Nonostante questo file comprenda parecchie decine di parametri, nella maggior parte dei casi il valore di default è il più ragionevole e ci si occuperà solo di pochissimi parametri (generalmente cfg_file, cfg_dir e admin_email). In ogni caso, una descrizione dettagliata di ogni singolo parametro è disponibile nella documentazione ufficiale.

/var/www/etc/nagios/nagios.cfg
# Percorso del file di log e della directory di archivio dei log. Tutti i
# percorsi sono relativi alla directory chroot '/var/www/'
log_file=/var/log/nagios/nagios.log
log_archive_path=/var/log/nagios/archives

# Percorsi dei file gestiti internamente dall'applicazione
object_cache_file=/var/nagios/objects.cache
precached_object_file=/var/nagios/objects.precache
status_file=/var/nagios/status.dat
state_retention_file=/var/nagios/retention.dat
command_file=/var/nagios/rw/nagios.cmd
lock_file=/var/run/nagios/nagios.pid
temp_file=/var/nagios/nagios.tmp
temp_path=/tmp
check_result_path=/var/spool/nagios

# Le definizioni degli oggetti (vd. prossimo capitolo) possono essere divise in
# piu' file. E' possibile elencare i file individualmente (usando il parametro
# 'cfg_file') o raggrupparli in directory (usando il parametro 'cfg_dir'). In
# questo secondo caso, Nagios processera' tutti i file con estensione '.cfg'
# all'interno delle directory indicate e le loro sottodirectory
cfg_file=/etc/nagios/timeperiods.cfg
cfg_file=/etc/nagios/contacts.cfg
cfg_file=/etc/nagios/commands.cfg
cfg_file=/etc/nagios/generic-hosts.cfg
cfg_file=/etc/nagios/generic-services.cfg
cfg_dir=/etc/nagios/hosts
cfg_dir=/etc/nagios/services

# Percorso del resource file, contenente le macro definite dall'utente
# (vd. sotto). Puoi specificare altri resource file usando piu' direttive
# 'resource_file'
resource_file=/etc/nagios/resource.cfg

# Utente e gruppo con cui girera' il processo Nagios
nagios_user=_nagios
nagios_group=_nagios

# Indirizzo email e numero di pager dell'amministratore della macchina
admin_email=nagios@kernel-panic.it
admin_pager=xxx-xxx-xxxx

# Formato della data (opzioni possibili: us, euro, iso8601 o strict-iso8601)
date_format=euro

# Abilita controlli, notifiche e gestori di eventi. I controlli passivi
# consentono ad applicazioni esterne di sottoporre a Nagios i risultati dei
# controlli. I gestori di eventi sono comandi opzionali da eseguire ad ogni
# cambio di stato di un host o servizio
execute_service_checks=1
accept_passive_service_checks=1
execute_host_checks=1
accept_passive_host_checks=1
enable_notifications=1
enable_event_handlers=1

# Opzioni sulla 'freschezza' dei controlli. Abilitare queste opzioni garantisce
# che i controlli passivi siano sempre aggiornati
check_service_freshness=1
service_freshness_check_interval=60
check_host_freshness=0
host_freshness_check_interval=60
additional_freshness_latency=15

# I comandi esterni consentono all'interfaccia web e ad applicazioni esterne
# (come NSCA) di impartire comandi a Nagios. Con un intervallo pari a '-1',
# Nagios controllera' i comandi esterni il piu' spesso possibile
check_external_commands=1
command_check_interval=-1
external_command_buffer_slots=4096

# Varie opzioni di log
log_rotation_method=d
use_syslog=1
log_notifications=1
log_service_retries=1
log_host_retries=1
log_event_handlers=1
log_initial_states=0
log_external_commands=1
log_passive_checks=1

# Abilita il salvataggio delle informazioni di stato fra restart (vd.
# documentazione per ulteriori dettagli)
retain_state_information=1
retention_update_interval=60
use_retained_program_state=1
use_retained_scheduling_info=0
retained_host_attribute_mask=0
retained_service_attribute_mask=0
retained_process_host_attribute_mask=0
retained_process_service_attribute_mask=0
retained_contact_host_attribute_mask=0
retained_contact_service_attribute_mask=0

# Opzioni di flapping dello stato (vd. documentazione per ulteriori dettagli)
enable_flap_detection=0
low_service_flap_threshold=5.0
high_service_flap_threshold=20.0
low_host_flap_threshold=5.0
high_host_flap_threshold=20.0

# Varie opzioni di tuning, performance e sicurezza (vd. documentazione per
# ulteriori dettagli)
interval_length=60
service_inter_check_delay_method=s
max_service_check_spread=30
service_interleave_factor=s
host_inter_check_delay_method=s
max_host_check_spread=30
max_concurrent_checks=0
check_result_reaper_frequency=10
max_check_result_reaper_time=30
max_check_result_file_age=3600
cached_host_check_horizon=15
cached_service_check_horizon=15
enable_predictive_host_dependency_checks=1
enable_predictive_service_dependency_checks=1
soft_state_dependencies=0
auto_reschedule_checks=0
auto_rescheduling_interval=30
auto_rescheduling_window=180
status_update_interval=15
event_broker_options=-1

sleep_time=0.25
service_check_timeout=60
host_check_timeout=30
event_handler_timeout=30
notification_timeout=30
ocsp_timeout=5
perfdata_timeout=5

use_aggressive_host_checking=0
process_performance_data=0
obsess_over_services=0
obsess_over_hosts=0
translate_passive_host_checks=0
passive_host_checks_are_soft=0

check_for_orphaned_services=0
check_for_orphaned_hosts=1

p1_file=/usr/local/bin/p1.pl
enable_embedded_perl=1
use_embedded_perl_implicitly=1

illegal_object_name_chars=`~!$%^&*|'"<>?,()=
illegal_macro_output_chars=`~$&|'"<>
use_regexp_matching=0
use_true_regexp_matching=0
daemon_dumps_core=0
use_large_installation_tweaks=0
enable_environment_macros=1

# Opzioni di debug
debug_level=0
debug_verbosity=1
debug_file=/var/nagios/nagios.debug
max_debug_file_size=1000000

2.2.2 Il resource file

Il resource file consente di assegnare un valore alle macro definibili dall'utente "$USERn$" (dove n è un numero compreso fra 1 e 32). Fondamentalmente, in Nagios, le macro sono variabili (che cominciano e finiscono con un segno di dollaro, "$") che si possono inserire all'interno delle definizioni dei comandi e che verrano sostituite con il rispettivo valore subito prima dell'esecuzione del comando. Le macro definite dall'utente (e le molte altre macro che Nagios rende disponibili) consentono di mantenere le definizioni dei comandi generiche e semplici (vd. il prossimo capitolo per alcuni esempi).

Le macro definite dagli utenti contengono normalmente elementi ricorrenti nelle definizioni dei comandi (come i percorsi di directory) e informazioni sensibili (come nomi utente e password). È consigliabile impostare permessi restrittivi (600) sul resource file in modo da proteggere le informazioni sensibili.

/var/www/etc/nagios/resource.cfg
# Assegna a $USER1$ il percorso dei plugin
$USER1$=/usr/local/libexec/nagios

# MySQL username e password
$USER2$=root
$USER3$=password

Il prossimo passo è la configurazione dei dati degli oggetti da monitorare, che è probabilmente la parte più complessa della configurazione. Dedicheremo quindi il prossimo capitolo interamente a questo argomento.