robimassa

Another Subtext Powered Blog
posts - 17, comments - 2494, trackbacks - 0

My Links

News

Archives

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                    24x7
        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             24x7
        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

Print | posted on Tuesday, April 30, 2013 10:56 PM |

Feedback

No comments posted yet.

Post Comment

Title  
Name  
Email
Url
Comment   
Please add 6 and 6 and type the answer here:

Powered by:
Powered By Subtext Powered By ASP.NET