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