User Tools

Site Tools


storage:svc_scripts

This is an old revision of the document!


SVC scripts

Monitoring SVC nagios

Check paths

[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

Check quorum

[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

Check paths

[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

Check v7000/SVC

storage/svc_scripts.1736178689.txt.gz · Last modified: 2025/01/06 16:51 by manu