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

Annunci

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...