====== Check passivo con Nagios3 e Bacula ====== Vedere questa pagina per riferimento: **[[http://wiki.bacula.org/doku.php?id=nagios|Monitoring Bacula with Nagios]]**. Si scelie l'opzione //check passivo//, cioè il server Nagios resta in attesa che l'host Bacula lo avverta al termine dell'operazione di backup. Normalmente accade il viceversa: il server Nagios interroga l'host per sapere lo stato del servizio. Per questo occorre installare **NSCA** (Nagios Service Check Acceptor), che funziona in architettura client-server, sulla porta **TCP 5667**. L'installazione è stata fatta con Nagios 3.2.0 su Debian Squeeze e Bacula 5.0.1 con NSCA 2.6 su Suse SLES 10. ===== Configurazione del server (Nagios) ===== In Debian Squeeze troviamo il singolo pacchetto **nsca**, che contiene il client **''send_nsca''** e il server **''nsca''**. In Debian Wheezy invece si hanno i due pacchetti **nsca** e **nsca-client**, openSUSE fornisce **nagios-nsca-client** e **nagios-nsca**. La comunicazione tra client e server avviene in chiaro e senza password, se si vuole qualcosa di meglio editare il file ''/etc/nsca.cfg'' sul server e ''/etc/send_nsca.cfg'' sul client. Purtroppo l'eventuale password deve essere condivisa tra tutti i client. Anzitutto si definisce un template per i servizi passivi, creando un file **''/etc/nagios3/conf.d/passive-service.cfg''**: # Passive service definition template define service{ name passive-service ; The 'name' of this service template, ; referenced in other service definitions active_checks_enabled 0 ; Active service checks are disabled passive_checks_enabled 1 ; Passive service checks are enabled/accepted parallelize_check 1 ; Active service checks should be parallelized ; (disabling this can lead to major performance problems) obsess_over_service 1 ; We should obsess over this service (if necessary) check_freshness 1 ; Default is to NOT check service 'freshness' freshness_threshold 4800 ; Threshold for fresh/stale data (seconds) notifications_enabled 1 ; Service notifications are enabled event_handler_enabled 1 ; Service event handler is enabled flap_detection_enabled 1 ; Flap detection is enabled process_perf_data 1 ; Process performance data retain_status_information 1 ; Retain status information across program restarts retain_nonstatus_information 1 ; Retain non-status information across program restarts notification_interval 0 ; Only send notifications on status change by default. is_volatile 0 check_period 24x7 normal_check_interval 5 retry_check_interval 1 max_check_attempts 4 notification_period 24x7 notification_options w,u,c,r contact_groups admins register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, ; JUST A TEMPLATE! } Quindi si definisce un più specifico **bacula-service** basato sul template precedente. Lo possiamo aggiungere al file **''/etc/nagios3/conf.d/services_nagios2.cfg''**: # Template service (not registered) for Bacula backups. # Bacula checks are received as passive checks (see the # passive_service definition), so this check is only run # if no passive checks are received past freshness_threshold. # In that case a status 2 (CRITICAL) is assumed. define service { name bacula-service use passive-service freshness_threshold 93600 ; 26 hours max_check_attempts 1 check_command return-critical notification_interval 1440 register 0 } Due parametri i fondamentali da configurare. Il primo è **freshness_threshold**: aspettiamo fino a 26 ore di ricevere un check passivo, altrimenti si esegue un check attivo che ritorna uno stato CRITICAL. Il secondo parametro importante è **max_check_attempts** da impostarsi ad un valore molto basso, possibilmente 1; in questo modo lo //status type// diviene HARD al primo check fallito. Se si lasciasse il valore predefinito di max_check_attempts pari a 4 si avrebbe che per 26 * 4 = 104 ore il servizio risulta SOFT CRITICAL, e quindi mostrato in verde nel grafico del trend. Poi si aggiunge un finto host, che serve solo per raggruppare tutti i backup monitorati. Si può creare il file **''/etc/nagios3/conf.d/bacula_backups.cfg''**: # Dummy host configuration. # Bacula backups are reported as passive checks (initiated by # the Bacula director), so we really do not check anything here. # The check command will therefore always return OK. define host { host_name Bacula_backups address 127.0.0.1 use generic-host check_command return-ok notification_interval 86400 notification_period 24x7 notification_options d,u,r contact_groups admins } Infine, per ogni job Bacula, si aggiunge un effettivo servizio, ad esempio nel file **''/etc/nagios3/conf.d/services_nagios2.cfg''**: # We need a backup service for each Bacula job. # The host is just dummy, used to group the backup jobs. define service { service_description FileserverHome use bacula-service host_name Bacula_backups } Quando Nagios è in esecuzione riceve le notifiche da **''nsca''** sulla pipe **''/var/lib/nagios3/rw/nagios.cmd''**, ma questa esiste solo se sono attivi gli **[[http://nagios.sourceforge.net/docs/2_0/extcommands.html|external commands]]**. Per questo verificare che in **''/etc/nagios3/nagios.cfg''** ci siano almeno queste impostazioni: check_external_commands=1 command_check_interval=10 Se la pipe non esiste i comandi vengono accodati al file **''/var/run/nagios/nsca.dump''** e processati in seguito (Davvero? Non pare proprio! Come dovrebbe funzionare?). ===== Problema di versione ===== Attenzione alla **versione del client e del server nsca**! Debian Squeeze (nsca 2.7.2) e Debian Wheezy (nsca 2.9.1) non sono compatibili, ma il messaggio di errore del server non è chiaro, con la crittografia attiva l'errore è: Dropping packet with invalid CRC32 - possibly due to client using wrong password or crypto algorithm? più comprensibile se la crittografia è disabilitata: Received invalid packet type/version from client - possibly due to client using wrong password or crypto algorithm? Per fortuna si trova il backport del pacchetto per Debian Squeeze. ===== Configurazione del client (Bacula) ===== Installare il cient che consiste essenzialmente nel programma **''send_nsca''**. In GNU/Linux Suse SLES 10 troviamo il pacchetto **nagios-nsca-client**. Predisporre uno script del tipo (**ATTENZIONE** il separatore per il file da dare in input a send_nsca è il TAB): #!/bin/sh # Inform nagios about the success (or lack thereof) of the most recent # attempt of each backup job # # args: # $1: job name # $2: status (0 for success, anything else for failure) # $3: whatever you want to appear as the plugin output if [ "$2" -eq "0" ] then status=0 else status=2 fi send_nsca -H 172.16.237.211 -c /etc/send_nsca.cfg < Aggiungere queste due righe alla definizione del job di backup, nel file ''/etc/bacula/bacula-dir.conf'': Run After Job = "/usr/local/sbin/bacula2nagios \"%n\" 0 \"%e %l %v\"" Run After Failed Job = "/usr/local/sbin/bacula2nagios \"%n\" 1 \"%e %l %v\"" Dove i vari token significano: ^ %n | Job Name | ^ %e | Job Exit Status | ^ %l | Job Level | ^ %v | Volume Name | Per simulare la notifica di un avvenuto backup al server nsca/nagios: /usr/local/sbin/bacula2nagios FileServer 0 "OK Incremental p00v1"