Controllo dello stato di un servizio in cluster tramite Nagios

Il Nagios è un potente ambiente di monitoraggio, la sua forza sta nella possibilità di compilare semplici script per monitorare eventi diversi.

Lo script proposto è utile per controllare lo stato di un servizio (Resource group) definito su un Cluster REDHAT

la condizione è che venga installato sui nodi del cluster, NRPE tramite il quale Nagios, lanciando lo script ottiene le informazioni sullo stato del servizio, ossia se il servizio è attivo, e se lo è su quale nodo del cluster.

La logica di funzionamento è semplice, eseguire il comando clustat ottenere il risultato in ingresso e confrontarlo con un valore di riferimento che deve essere il nodo preferenziale per l’esecuzione del servizio clusterizzato, se il servizio è in DOWN otterremo un valore di ritorno in errore STATE CRITICAL.

Se il valore di ritorno corrisponde a quello di confronto, quindi se il servizio è in esecuzione sul nodo predefinito avremo un valore di ritorno STATE OK. Nel terzo caso se il valore di ritorno non è corrispondente al valore di confronto otterremo uno STATE WARNING.

Testo del plugin

#!/bin/bash
# Plugin di controllo stato servizi in Cluster   Robi Massa vrs. 1.0  2011
# ./controllo_servizi_cluster 1 2 3
# NOTA BENE il comando viene eseguito con il demone NRPE che normalmente ha privilegi ridotti rispetto a root
# il comando CLUSTAT ( in alcune versioni di RHCLUSTER non funziona se no lanciato da root
# e’ necessario quindi sesguire il seguento comando chmod u+s /usr/sbin/clustat  per consentire  il funzionamento corretto

PROGPATH=`echo $0 | sed -e ‘s,[\/][^\/][^[^\/]*$,,’`
. $PROGPATH/utils.sh
STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2

#parametri NORMALE condizione in cui il servizio gira sul nodo designato SERVIZIO nome del servizio da controllare
SERVIZIO=$1
NORMALE=$2
VARSERVICE=service: #usata per costruire la parte invariabila della stringa di confronto
VARSTARTED=started #usata per costruire la parte invariabila della stringa di confronto

#il comando estrae l’output di clustat estraendo la riga contenente il servizio da monitorare e lo formatta
#eliminando tutti gli spazi e formando una stringa compatta N.B. l’output senza questa formattazione contiene caratteri che
#falsano il confronto

RETVAL=$(/usr/sbin/clustat |grep -w $SERVIZIO | sed ‘s/ //g’)
# costruisco la stringa confronto nel modo in cui dovrbbe essere presentata se il servizio controllato fosse sul nodo corretto
CONFRONTO=$VARSERVICE$SERVIZIO$NORMALE$VARSTARTED

# da eliminare commento per test output plugin
#echo $RETVAL
#echo $CONFRONTO

        if [[ “$RETVAL” == “$CONFRONTO” ]] ; then
echo “OK il servizio $SERVIZIO e’ sul nodo $NORMALE”
exit $STATE_OK

        elif [[ “$RETVAL” != “$CONFRONTO” ]] ; then
echo “ATTENZIONE il servizio $SERVIZIO non e’ sul nodo $NORMALE”
exit $STATE_WARNING

        else
echo “controllo dello stato del servizio $SERVIZIO impossibile verificare lo stato possibile BLOCCO”
exit $STATE_CRITICAL
fi

Ho riportato lo script così come lo utilizzo, con i commenti all’interno che ne descrivono i vari passi.

Qui sotto è riportata invece la riga da inserire nel file NRPE.CFG per dichiarare il comando che usa il plugin descritto sopra

command[check_rhcluster_status_servizio_oracle]=/usr/lib64/nagios/plugins/check_rhcluster_status servizio_in_cluster fqdn_nodo_preferito

il comando esegue il plugin passando i due valori come parametri, il nome del servizio da controllare ed il nodo di preferenza sul quale il servizio deve essere attivo

 

Questa invece è la dichiarazione dal lato del server NAGIOS del controllo da eseguire.

define service {
service_description             Controllo servizio ORACLE Cluster Takover
use                             generic-service
host_name                       fqdn.ip.cluster                    is_volatile                            0
check_period                    24×7
max_check_attempts              4
normal_check_interval           5
retry_check_interval               1
contact_groups                  cluster_takeover
notification_options            w,u,c,r
notification_interval           960
notification_period             24×7
check_command                   check_nrpe!check_rhcluster_status_servizio_oracle

L’output dal lato del pannello NAGIOS relativo al controllo di due servizi monitorati, uno correttamente sul nodo predefinito ed uno su un nodo di ridondanza

image

image