#!/bin/sh # #-*- mode: Fundamental; tab-width: 4; -*- # ex:ts=4 # check_oracle_cluster -- Nagios Plugins for Oracle Cluster # Copyright (c) 2008 UNIFESP - Ricardo Alves dos Reis # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. PROGNAME=$(basename $0) PROGPATH=$(echo $0 | /bin/sed -e 's,[\\/][^\\/][^\\/]*$,,') CRSSTAT_PATH="/usr/bin/sudo /app/crs/oracle/product/10.2.0/crs/bin/crsstat" EGREP_PATH=`which egrep` CUT_PATH=`which cut` TR_PATH=`which tr` EXIT_ERROR="1" EXIT_OK="0" EXIT_USAGE="64" LOCAL_VERSION="0.80" . $PROGPATH/utils.sh exitstatus=$STATE_WARNING #default help() { cat<&1 |awk '$0 ~ /'${SERVICE}'/ && $5 ~ /'${NODE}'/ { print $2 }' ) elif [ $TYPE_OF_STATUS = "i" ];then INSTANCE_STATUS=$( $CRSSTAT_PATH 2>&1 |awk '$0 ~ /'${SERVICE}'/ && $5 ~ /'${NODE}'/ { print $3 }' ) else echo "UNKNOW TYPE" fi } check() { SERVICE="$1";shift SERVICE_STATUS="$1";shift INSTANCE_STATUS="$1" if [ "$SERVICE_STATUS" = "ONLINE" -a "$INSTANCE_STATUS" = "ONLINE" ];then echo "ORACLE_CLUSTER_${SERVICE} OK: 0 problem(s)" exit $STATE_OK elif [ "$SERVICE_STATUS" = "ONLINE" -a "$INSTANCE_STATUS" = "OFFLINE" ];then echo "ORACLE_CLUSTER_${SERVICE} CRITICAL: Instance FAILED" exit $STATE_CRITICAL elif [ "$SERVICE_STATUS" = "OFFLINE" ];then echo "ORACLE_CLUSTER_${SERVICE} CRITICAL: Service FAILED" exit $STATE_CRITICAL else echo "ORACLE_CLUSTER_${SERVICE} WARNING: UNKNOW problem(s)" exit $STATE_WARNING fi } init() { NODE="$1";shift OPTIONS="$1" if [ "$OPTIONS" = "-a" ];then SERVICE="asm" command s $SERVICE $NODE command i $SERVICE $NODE check $SERVICE $SERVICE_STATUS $INSTANCE_STATUS elif [ "$OPTIONS" = "-l" ];then SERVICE="lsnr" command s $SERVICE $NODE command i $SERVICE $NODE check $SERVICE $SERVICE_STATUS $INSTANCE_STATUS elif [ "$OPTIONS" = "-g" ];then SERVICE="gsd" command s $SERVICE $NODE command i $SERVICE $NODE check $SERVICE $SERVICE_STATUS $INSTANCE_STATUS elif [ "$OPTIONS" = "-o" ];then SERVICE="ons" command s $SERVICE $NODE command i $SERVICE $NODE check $SERVICE $SERVICE_STATUS $INSTANCE_STATUS elif [ "$OPTIONS" = "-v" ];then SERVICE="vip" command s $SERVICE $NODE command i $SERVICE $NODE check $SERVICE $SERVICE_STATUS $INSTANCE_STATUS fi } if [ $# -eq 0 ];then help fi while getopts "halgovn:" OPT ;do if [ "$OPT" = "n" ];then case "$3" in "-a") init $OPTARG $3 shift;; "-l") init $OPTARG $3 shift;; "-g") init $OPTARG $3 shift;; "-o") init $OPTARG $3 shift;; "-v") init $OPTARG $3 shift;; *) help exit 2 esac fi done