I tried the scripts on AIX but i can't get them running. AIX Version 7.1 TL2 SP4, Bash 3.2.1, getopt-1.1.4-3
Here is the output with -vvv
./check_database_connection -i /db2/db2ez1 -d EZ1 -vvv
Usage: check_database_connection { -i instanceHomeDirectory -d databaseName [-K]
| -h | -V } [-T][-v]
Note: The test was not executed.|
|
Here the output with debug on
db2ez1> ./check_database_connection -i /db2/db2ez1 -d EZ1 -vvv
Locale to print messages in English. Prevent language problems.
export LANG=en_US
- export LANG=en_US
- LANG=en_US
Version of this script.
function print_revision {
echo Andres Gomez Casanova - AngocA
echo v1.1 2013-05-25
}
Function to show the help
function print_usage {
/bin/cat <<__EOT
Usage: ${1} { -i instanceHomeDirectory -d databaseName [-K]
| -h | -V } [-T][-v]
__EOT
}
function print_help {
print_revision
print_usage ${1}
Max 80 chars width.
/bin/cat <<__EOT
This script checks the connectivity to a database.
-d | --database STRING
Database name.
-h | --help
Shows the current documentation.
-i | --instance STRING
Instance home directory. It is usually /home/db2inst1.
-K | --mk
Changes the output to be compatible with Check_MK.
-T | --trace
Trace mode: writes date and output in /tmp.
-v | --verbose
Executes the script in verbose mode (multiple times).
-V | --version
Shows the current version of this script.
__EOT
}
Variable to control the flow execution. Prevent Spaghetti code.
CONTINUE=true
Nagios return codes
OK=0
- OK=0
WARNING=1
- WARNING=1
CRITICAL=2
- CRITICAL=2
UNKNOWN=3
- UNKNOWN=3
This is the returned code.
RETURN=${UNKNOWN}
- RETURN=3
Nagios Output
Text output 80 chars | Optional Perf Data Line 1
Long text Line 1
Long text Line 2 | Optional Perf Data Line 2
Optional Perf Data Line 3
OUTPUT=
- OUTPUT=
PERFORMANCE=
- PERFORMANCE=
LONG_OUTPUT=
- LONG_OUTPUT=
LONG_PERFORMANCE=
- LONG_PERFORMANCE=
PERF_MK="-"
- PERF_MK=-
APPL_NAME=$(basename ${0})
basename ${0}
++ basename ./check_database_connection
- APPL_NAME=check_database_connection
if [[ ${#} -eq 0 ]] ; then
print_usage ${APPL_NAME}
RETURN=${UNKNOWN}
CONTINUE=false
fi
The following requieres GNU getopt. See the following discusion.
TEMP=$(getopt -o d:hi:KTvV --long database:,help,instance:,mk,trace,verbose,version
-n ${APPL_NAME} -- "${@}")
getopt -o d:hi:KTvV --long database:,help,instance:,mk,trace,verbose,version -n ${APPL_NAME} -- "${@}"
++ getopt -o d:hi:KTvV --long database:,help,instance:,mk,trace,verbose,version -n check_database_connection -- -i /db2/db2ez1 -d EZ1 -vvv
- TEMP='-- d:hi:KTvV --long database:,help,instance:,mk,trace,verbose,version -n check_database_connection -- -i /db2/db2ez1 -d EZ1 -vvv '
if [[ ${?} -ne 0 ]] ; then
print_usage ${APPL_NAME}
RETURN=${UNKNOWN}
CONTINUE=false
fi
if [[ ${CONTINUE} == true ]] ; then
Note the quotes around ${TEMP}: they are essential!
eval set -- "${TEMP}"
HELP=false
VERSION=false
CHECK_MK=false
Verbosity level
VERBOSE=0
Trace activated
TRACE=false
LOG=/tmp/${APPL_NAME}.log
INSTANCE_HOME=
DATABASE_NAME=
while true; do
case "${1}" in
-d | --database ) DATABASE_NAME=$(echo ${2} | cut -d' ' -f1) ; shift 2 ;;
-h | --help ) HELP=true ; shift ;;
-i | --instance ) INSTANCE_HOME=$(echo ${2} | cut -d' ' -f1) ; shift 2 ;;
-K | --mk ) CHECK_MK=true ; shift ;;
-T | --trace ) TRACE=true ; shift ;;
-v | --verbose ) VERBOSE=$(( ${VERBOSE} + 1 )) ; shift ;;
-V | --version ) VERSION=true ; shift ;;
-- ) shift; break ;;
* ) break ;;
esac
done
fi
- [[ true == true ]]
- eval set -- '-- d:hi:KTvV --long database:,help,instance:,mk,trace,verbose,version -n check_database_connection -- -i /db2/db2ez1 -d EZ1 -vvv '
set -- -- d:hi:KTvV --long database:,help,instance:,mk,trace,verbose,version -n check_database_connection -- -i /db2/db2ez1 -d EZ1 -vvv
++ set -- -- d:hi:KTvV --long database:,help,instance:,mk,trace,verbose,version -n check_database_connection -- -i /db2/db2ez1 -d EZ1 -vvv
- HELP=false
- VERSION=false
- CHECK_MK=false
- VERBOSE=0
- TRACE=false
- LOG=/tmp/check_database_connection.log
- INSTANCE_HOME=
- DATABASE_NAME=
- true
- case "${1}" in
- shift
- break
if [[ ${TRACE} == true ]] ; then
echo ">>>>>" >> ${LOG}
date >> ${LOG}
echo "Instance at ${INSTANCE_HOME}" >> ${LOG}
echo "PID ${$}" >> ${LOG}
fi
ECHO="help:${HELP}, version:${VERSION}, verbose:${VERBOSE}"
- ECHO='help:false, version:false, verbose:0'
ECHO="${ECHO}, check_mk:${CHECK_MK}"
- ECHO='help:false, version:false, verbose:0, check_mk:false'
ECHO="${ECHO}, directory:${INSTANCE_HOME}, database:${DATABASE_NAME}"
- ECHO='help:false, version:false, verbose:0, check_mk:false, directory:, database:'
if [[ ${VERBOSE} -ge 2 ]] ; then
echo ${ECHO}
fi
if [[ ${TRACE} == true ]] ; then
echo "PARAMS:${ECHO}" >> ${LOG}
fi
if [[ ${CONTINUE} == true && ${HELP} == true ]] ; then
print_help ${APPL_NAME}
RETURN=${UNKNOWN}
CONTINUE=false
fi
- [[ true == true ]]
- [[ false == true ]]
if [[ ${CONTINUE} == true && ${VERSION} == true ]] ; then
print_revision ${APPL_NAME}
RETURN=${UNKNOWN}
CONTINUE=false
fi
- [[ true == true ]]
- [[ false == true ]]
if [[ ${CONTINUE} == true && ${INSTANCE_HOME} == "" ]] ; then
print_usage ${APPL_NAME}
RETURN=${UNKNOWN}
CONTINUE=false
fi
- [[ true == true ]]
- [[ '' == '' ]]
- print_usage check_database_connection
- /bin/cat
Usage: check_database_connection { -i instanceHomeDirectory -d databaseName [-K]
| -h | -V } [-T][-v]
- RETURN=3
- CONTINUE=false
if [[ ${CONTINUE} == true && ${DATABASE_NAME} == "" ]] ; then
print_usage ${APPL_NAME}
RETURN=${UNKNOWN}
CONTINUE=false
fi
if [[ ${CONTINUE} == true ]] ; then
if [[ -d ${INSTANCE_HOME} && -e ${INSTANCE_HOME}/sqllib/db2profile ]] ; then
# Load the DB2 profile.
. ${INSTANCE_HOME}/sqllib/db2profile
INSTANCE_NAME=$(db2 get instance | awk '/instance/ {print $7}')
else
OUTPUT="Instance directory is invalid."
RETURN=${UNKNOWN}
CONTINUE=false
fi
fi
if [[ ${CONTINUE} == true ]] ; then
COMMAND_DATABASE="db2 list db directory"
if [[ ${VERBOSE} -ge 2 ]] ; then
echo "COMMAND: ${COMMAND_DATABASE}"
fi
DATABASE=$(${COMMAND_DATABASE})
if [[ ${TRACE} == true ]] ; then
echo "RESULT:'${DATABASE}'" >> ${LOG}
fi
DATABASE=$(printf '%s\n' "${DATABASE}" | awk '/Database alias/ {print $4}' | grep -iw ${DATABASE_NAME})
if [[ ${VERBOSE} -ge 3 ]] ; then
echo "RESULT:'${DATABASE}'"
fi
if [[ ${DATABASE} == "" ]] ; then
OUTPUT="The database ${DATABASE_NAME} is not cataloged."
RETURN=${UNKNOWN}
CONTINUE=false
fi
fi
if [[ ${CONTINUE} == true ]] ; then
COMMAND_ACTIVE="db2 list active databases"
if [[ ${VERBOSE} -ge 2 ]] ; then
echo "COMMAND: ${COMMAND_ACTIVE}"
fi
ACTIVE=$(${COMMAND_ACTIVE})
if [[ ${TRACE} == true ]] ; then
echo "RESULT:'${ACTIVE}'" >> ${LOG}
fi
ACTIVE=$(printf '%s\n' "${ACTIVE}" | awk '/Database name/ {print $4}' | grep -iw ${DATABASE_NAME})
if [[ ${VERBOSE} -ge 3 ]] ; then
echo "RESULT:'${ACTIVE}'"
fi
if [[ ${ACTIVE} == "" ]] ; then
OUTPUT_ACTIVE="The database is not active. "
LONG_OUTPUT="${OUTPUT_ACTIVE}"
LONG_PERFORMANCE_1="'Database_Active'=0.2;0.5"
else
OUTPUT_ACTIVE="The database is active. "
LONG_OUTPUT="${OUTPUT_ACTIVE}"
LONG_PERFORMANCE_1="'Database_Active'=0.8;0.5"
fi
COMMAND_CONNECTABLE="db2 -a connect to ${DATABASE_NAME}"
if [[ ${VERBOSE} -ge 2 ]] ; then
echo "COMMAND: ${COMMAND_CONNECTABLE}"
fi
CONNECTABLE=$(${COMMAND_CONNECTABLE})
if [[ ${TRACE} == true ]] ; then
echo "RESULT:'${CONNECTABLE}'" >> ${LOG}
fi
CONNECTABLE=$(printf '%s\n' "${CONNECTABLE}" | awk '/sqlcode/ {print $7}')
if [[ ${VERBOSE} -ge 3 ]] ; then
echo "RESULT:'${CONNECTABLE}'"
fi
if [[ ${CONNECTABLE} -eq 0 ]] ; then
OUTPUT="OK Connection to database ${DATABASE_NAME}. "${OUTPUT_ACTIVE}
RETURN=${OK}
PERFORMANCE="'Connectable_Database'=0.9;0.6;0.3"
elif [[ ${CONNECTABLE} -eq -20157 ]] ; then
OUTPUT="The database is in quiesce mode. "${OUTPUT_ACTIVE}
RETURN=${WARNING}
PERFORMANCE="'Connectable_Database'=0.4;0.6;0.3"
else
OUTPUT="A connection to database ${DATABASE_NAME} was not succesful. "${OUTPUT_ACTIVE}
LONG_OUTPUT="${LONG_OUTPUT} ${CONNECTABLE}"
RETURN=${CRITICAL}
PERFORMANCE="'Connectable_Database'=0.1;0.6;0.3"
fi
Check for HADR Window replay
COMMAND_ROLE="db2 get db cfg for ${DATABASE_NAME}"
if [[ ${VERBOSE} -ge 2 ]] ; then
echo "COMMAND: ${COMMAND_ROLE}"
fi
ROLE=$(${COMMAND_ROLE})
if [[ ${TRACE} == true ]] ; then
echo "RESULT:'${ROLE}'" >> ${LOG}
fi
ROLE=$(printf '%s\n' "${ROLE}" | awk '/HADR database role/ {print $5}')
if [[ ${VERBOSE} -ge 3 ]] ; then
echo "RESULT:'${ROLE}'"
fi
if [[ ${ROLE} == "STANDBY" ]] ; then
COMMAND_REPLAY="db2pd -db wfscpd -hadr"
if [[ ${VERBOSE} -ge 2 ]] ; then
echo "COMMAND: ${COMMAND_REPLAY}"
fi
REPLAY=$(${COMMAND_REPLAY})
if [[ ${TRACE} == true ]] ; then
echo "RESULT:'${REPLAY}'" >> ${LOG}
fi
REPLAY=$(printf '%s\n' "${REPLAY}" | awk '/^Active/ {print "active"}')
if [[ ${VERBOSE} -ge 3 ]] ; then
echo "RESULT:'${REPLAY}'"
fi
if [[ ${REPLAY} == "active" ]] ; then
LONG_PERFORMANCE_2="HADR-replay=0.3;0.5"
else
LONG_PERFORMANCE_2="HADR-replay=0.7;0.5"
fi
fi
LONG_PERFORMANCE="${LONG_PERFORMANCE_1} ${LONG_PERFORMANCE_2}"
if [[ ${LONG_PERFORMANCE_2} == "" ]] ; then
PERF_MK="${PERFORMANCE}|${LONG_PERFORMANCE_1}"
else
PERF_MK="${PERFORMANCE}|${LONG_PERFORMANCE_1}|${LONG_PERFORMANCE_2}"
fi
fi
Prints the output.
if [[ ${OUTPUT} == "" ]] ; then
OUTPUT="Note: The test was not executed."
fi
- [[ '' == '' ]]
- OUTPUT='Note: The test was not executed.'
Builds the output.
if [[ ${CHECK_MK} == true ]] ; then
echo "${RETURN} databaseConnection-${INSTANCE_NAME}-${DATABASE_NAME} ${PERF_MK} ${OUTPUT}"
else
echo -e "${OUTPUT}|${PERFORMANCE}\n${LONG_OUTPUT}|${LONG_PERFORMANCE}"
fi
- [[ false == true ]]
- echo -e 'Note: The test was not executed.|\n|'
Note: The test was not executed.|
|
Returns the error code.
if [[ ${VERBOSE} -ge 2 ]] ; then
echo "Return code: ${RETURN}"
fi
- [[ 0 -ge 2 ]]
if [[ ${TRACE} == true ]] ; then
echo -e "OUTPUT:${OUTPUT}\nPERF:${PERFORMANCE}\nLONG_OUT:${LONG_OUTPUT}\nLONGPERF:${LONG_PERFORMANCE}\nRET_CODE:${RETURN}" >> ${LOG}
date >> ${LOG}
echo -e "<<<<<\n" >> ${LOG}
fi
- [[ false == true ]]
exit ${RETURN}
- exit 3
Best regards
Stephan