This is an old revision of the document!
[root@aix001]/usr/local/nagios/libexec# cat check_paths.sh
#!/bin/sh
#@(#) v1.0 Count number of paths per disk
# v1.1 add sudo linux
# v1.2 change for VSCSI
# v1.3 add verbose (-v), improvements linux
# number of path per type of disk
pathviosfc=4
pathviosscsi=2
pathviossas=1
pathlparfc=8
pathlparscsi=2
pathlparsas=1
STATUS=0
STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2
STATE_UNKNOWN=3
MSG=""
verbose=""
# specified value for nb paths
if [ "$npath" == "" ]
then
nbpath=$pathlparfc
fi
os=$(uname -a | awk '{print $1}')
grepp() { [ $# -eq 1 ] && perl -00ne "print if /$1/i" || perl -00ne "print if /$1/i" < "$2";}
#---------------------
count_linux_path()
{
tempfile=/tmp/multipath.txt
if [ ! -x /usr/sbin/multipath ] || [ $(lsscsi -s | grep -q VMware; echo $?) -eq 0 ]
then
MSG="OK: no multipathing"
verbose="$MSG"
STATUS=$STATE_OK
else
if [ $(timeout 30 sudo /usr/sbin/multipath -ll | grep -v "policy=" | grep -v "size=" | tr -s ' ' | sed 's/\ /;/g' | sed '/^mpath/i \\n' > $tempfile ; echo $?) -ne "0" ]
then
MSG="$MSG Maybe error on sudo config"
verbose="$MSG"
STATUS=$STATE_UNKNOWN
else
for i in $(cat $tempfile | grep '^mpath' | awk -F';' '{print $1}')
do
pathok=$(cat $tempfile | grepp "^$i;" | grep -v "policy=" | grep -v "size=" | grep -v '^mpath' | grep active | wc -l | awk '{print $1}')
pathok_pct=$(echo "scale=1;100*$pathok/$nbpath" | bc | cut -d '.' -f1)
verbose="$verbose $i;$pathok/$nbpath" # verbose message
if [ "$pathok_pct" -lt "50" ]
then
MSG="$MSG $i;$pathok/$nbpath"
if [ $STATUS -lt $STATE_CRITICAL ]
then
STATUS=$STATE_CRITICAL
fi
else
if [ "$pathok_pct" -ne "100" ]
then
MSG="$MSG $i;$pathok/$nbpath"
if [ $STATUS -lt $STATE_CRITICAL ]
then
STATUS=$STATE_WARNING
fi
fi
fi
done
fi
fi
rm -f $tempfile 2>/dev/null
}
#---------------------
count_aix_path()
{
# check not available disks
nbdisknok=$(lsdev -Cc disk | grep -v Available | wc -l | awk '{print $1}')
if [ "$nbdisknok" -ne "0" ]
then
MSG="$MSG WARNING: $nbdisknok disks defined"
verbose="$MSG"
STATUS=$STATE_WARNING
else
STATUS=$STATE_OK
fi
for line in $(lsdev -Cc disk | tr -s ' ' | sed 's/\ /:/' | sed 's/\ /:/' | sed 's/\ /,/g')
do
hdisk=$(echo $line | awk -F':' '{print $1}')
if [ "$(echo $line | cut -d':' -f3- | tr 'A-Z' 'a-z' | grep -q mpio; echo $?)" -eq "0" ]
then
if [ ! -e /usr/ios/cli/ioscli ]
then
# type LPAR FC
nbpath=$pathlparfc
else
# type VIOS FC
nbpath=$pathviosfc
fi
else
if [ "$(echo $line | cut -d':' -f3- | tr 'A-Z' 'a-z' | grep -q scsi; echo $?)" -eq "0" ]
then
if [ ! -e /usr/ios/cli/ioscli ]
then
# type LPAR SCSI
nbpath=$pathlparscsi
else
# type VIOS SCSI
nbpath=$pathviosscsi
fi
else
if [ "$(echo $line | cut -d':' -f3- | tr 'A-Z' 'a-z' | grep -q sas; echo $?)" -eq "0" ]
then
if [ ! -e /usr/ios/cli/ioscli ]
then
# type LPAR SAS
nbpath=$pathlparsas
else
# type VIOS SAS
nbpath=$pathviossas
fi
fi
fi
fi
pathok=$(lspath -l $hdisk | grep Enabled | wc -l | awk '{print $1}')
pathok_pct=$(echo "scale=1;100*$pathok/$nbpath" | bc | cut -d '.' -f1)
verbose="$verbose $hdisk;$pathok/$nbpath"
if [ "$pathok_pct" -lt "50" ]
then
MSG="$MSG $hdisk;$pathok/$nbpath"
if [ $STATUS -lt $STATE_CRITICAL ]
then
STATUS=$STATE_CRITICAL
fi
else
if [ "$pathok_pct" -ne "100" ]
then
MSG="$MSG $hdisk;$pathok/$nbpath"
if [ $STATUS -lt $STATE_CRITICAL ]
then
STATUS=$STATE_WARNING
fi
fi
fi
done
}
######################
if [ "$os" = "Linux" ]
then
count_linux_path
else
if [ "$os" = "AIX" ]
then
count_aix_path
else
echo "########## Unknown OS"
STATUS=$STATE_UNKNOWN
fi
fi
if [ $STATUS -eq $STATE_OK ]
then
echo "OK"
else
echo "$MSG"
fi
# For debug
if [ "$1" = "-v" ]
then
echo "$verbose" | tr ' ' '\n'
fi
exit $STATUS
[root@nagios plugins]# cat check_ibm_storwize_quorum.sh
#!/bin/sh
#set -x
##################################################
#@(#) check SVC IP quorum
##################################################
# version: 1.0 02-2022 Manu
##################################################
STATUS=0
STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2
STATE_UNKNOWN=3
cluster=$(echo $1 | sed 's/\-cluster=//')
user="nagios"
quorumsrv="witness01.ad.com"
output=$(ssh $user@$cluster 'lsquorum -delim :')
STATUS=0
MSG=""
if [[ $(echo $output | tr ' ' '\n' | grep ':online:' | grep ':device:' | grep ":${quorumsrv}" | wc -l | awk '{print $1}') -ge "1" ]]
then
(( STATUS = STATUS + 0 ))
MSG="IP quorum: $quorumsrv OK"
else
(( STATUS = STATUS + 1 ))
MSG="IP quorum: $quorumsrv down!!!"
fi
if [[ $(echo $output | tr ' ' '\n' | grep ':online:' | grep -v ':device:' | wc -l | awk '{print $1}') -ge "2" ]]
then
(( STATUS = STATUS + 0 ))
MSG=$(echo "$MSG | nb quorum OK")
else
(( STATUS = STATUS + 1 ))
MSG=$(echo "$MSG | bad number of quorum !!")
fi
echo $MSG
exit $STATUS
[root@lnxb080 plugins]# cat check_storage_host_paths.sh
#!/bin/sh
#set -x
##################################################
#@(#) check host paths on SVC
##################################################
# version: 1.0 02-2022 Manu
##################################################
STATUS=0
STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2
STATE_UNKNOWN=3
cluster=$(echo $1 | sed 's/\-cluster=//')
user="nagios"
SSH="ssh -o ConnectTimeout=30 ${user}@"
list="svc01"
MSG=""
exclude=':none:'
word="$1"
case "$word" in
"esx" ) count=2
exclude=':none:' ;;
"aix" ) count=4
exclude="aixv" ;;
"lnx" ) count=4
exclude=':none:' ;;
"vio" ) count=2
word=aixv
exclude=':none:' ;;
"win" ) count=2
word='win|mssql'
exclude=':none:' ;;
"other" ) count=4
word='svc01'
exclude='esx|aix|lnx|win|mssql' ;;
"*" ) MSG="wrong parameter" ;;
esac
for storage in $(echo ${list})
do
cmd='lshost -delim : -nohdr'
for node in $(${SSH}${storage} $cmd | cut -d':' -f2)
do
cmd="lshost -delim : $node"
MSG1=$(echo "$storage:$node:$(${SSH}${storage} $cmd | grep -c "state:active")" | grep -v ':0$' | egrep -i "${word}" | grep -v ":${count}$" | egrep -vi "${exclude}")
if [ "$MSG1" != "" ]
then
MSG=$(echo "${MSG};${MSG1}")
fi
done
done
if [ "$MSG" == "" ]
then
RC=0
else
RC=2
echo $MSG
fi
exit $RC