flipje

nagios_check_areca_winraid

Mar 9th, 2012
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 5.21 KB | None | 0 0
  1. #!/bin/bash
  2. # +-----------------------------------------------------------------------------------------+
  3. # |  Dit script checked de raid status van Areca RAID kaarten op Ubuntu/Debian              |
  4. # |                                                                                         |
  5. # | Januari 2012 flip hess [email protected]                                              |
  6. # +-----------------------------------------------------------------------------------------+
  7.  
  8. # Global variables:
  9.  
  10. PATH='/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin'
  11. SCRIPT_PATH="${0}"
  12. ARGS="${#}"
  13.  
  14. ARG1="${1}"
  15. HOST="${2}"
  16. DISKS="${3}"
  17. STATE="/var/tmp/${HOST}-windows-raid"
  18. NRPE="/home/nagios/bin/check_nrpe"
  19. PORT="5666"
  20.  
  21. STATE_OK="0"
  22. STATE_WARNING="1"
  23. STATE_CRITICAL="2"
  24. STATE_UNKNOWN="3"
  25.  
  26. # Functions:
  27.  
  28.   # exit function
  29.   function die()
  30.   {
  31.     # output
  32.     echo -e "Error in ${SCRIPT_PATH}:\n ${1}"
  33.  
  34.     # return state unknown
  35.     exit ${STATE_UNKNOWN}
  36.   }
  37.  
  38.   # Shows usage function.
  39.   function fShowUsage()
  40.   {
  41.     echo -e "Usage: ${SCRIPT_PATH} [status|event|help] HOST DISKS\n
  42.    help     Show Usage
  43.    status    Check RAID status\n
  44.    event     Check RAID event\n
  45.    Check Areca on Window\$ - [email protected]\n\nVersie 1.0"
  46.  
  47.     exit "${STATE_UNKNOWN}"
  48.   }
  49.  
  50.   # function status
  51.   function fRunStatus()
  52.   {
  53.    # get cli output
  54.    OUTPUT="$( "${NRPE}" -t 60 -H "${HOST}" -p "${PORT}" -c check_raid | grep -Ev '(===|GuiErrMsg|Volume Set Information)' )" || die "Failed to get CLI OUTPUT"
  55.  
  56.    # check state
  57.    if ( echo ${OUTPUT} | grep -qE 'Volume.+State.+Normal' ) ; then
  58.      local STATE="1"
  59.      local STMSG="Volume State is Normal"
  60.    else
  61.      local STATE="0"
  62.      local STMSG="$( echo "${OUTPUT}" | grep -E 'Volume.+State.+:' )"
  63.    fi
  64.  
  65.    # check members
  66.    if ( echo "${OUTPUT}" | grep -qE "Member.Disks.+:.+${DISKS}" ) ; then
  67.      local MEMBER="1"
  68.      local MBMSG="Member Disks is ${DISKS}"
  69.    else
  70.      local MEMBER="0"
  71.      local MBMSG="$( echo "${OUTPUT}" | grep 'Member.+Disks.+:' )"
  72.    fi
  73.  
  74.    # make results
  75.    if [ ${STATE} = 1 ] && [ ${MEMBER} = 1 ] ; then
  76.       { echo -e "OKAY ${STMSG} and ${MBMSG}\n |\n${OUTPUT}" ; exit ${STATE_OK}; }
  77.    elif [ ${STATE} = 0 ] && [ ${MEMBER} = 0 ] ; then
  78.       { echo -e "CRITICAL - NOK: ${STMSG} - and NOK: ${MBMSG}\n |\n${OUTPUT}" ; exit ${STATE_CRITICAL}; }
  79.    elif [ ${STATE} = 1 ] && [ ${MEMBER} = 0 ] ; then
  80.       { echo -e "CRITICAL - Volume State is OKAY But Member Disks: ${MBMSG}\n |\n${OUTPUT}" ; exit ${STATE_CRITICAL}; }
  81.    elif [ ${STATE} = 0 ] && [ ${MEMBER} = 1 ] ; then
  82.       { echo -e "CRITICAL - Member Disks is OKAY but State: ${STMSG}\n |\n${OUTPUT}" ; exit ${STATE_CRITICAL}; }
  83.    else
  84.       { echo -e "WARNING - This Check is WONKY! BARK KRAK STUK!" ; exit ${STATE_WARNING}; }
  85.    fi
  86.  
  87.   }
  88.  
  89.   # function event
  90.   function fRunEvent()
  91.   {
  92.    #check state file
  93.    [ -f "${STATE}" ] || \
  94.    { fCheckReset && { echo "WARNING - check has been reset - a new ${STATE} error state file is created" ; exit "${STATE_WARNING}"; };}
  95.  
  96.    # get info
  97.    local TEMP="$(mktemp)"
  98.    { "${NRPE}" -t 60 -H "${HOST}" -p "${PORT}" -c check_raid_event | grep -Ev '(====|Date-Time|Device)' > ${TEMP} ; } || die "Failed to Get event info!"
  99.  
  100.    local TOTAL="$( cat "${TEMP}" | wc -l )"
  101.    local OLDTOTAL="$( cat "${STATE}" | wc -l )"
  102.    local DELTA="$(( ${TOTAL} - ${OLDTOTAL} ))"
  103.    local LAST="$( cat "${TEMP}" | head -1 )"
  104.  
  105.    # diff
  106.    DIFFS="$( diff "${TEMP}" "${STATE}" |grep -E '(<|>)'  |sed -e 's/^>/missing event:/g;s/^</event:/g' )"
  107.  
  108.    # make results
  109.    if [ -z "${DIFFS}" ] ; then
  110.      rm ${TEMP}
  111.      echo -e "ALL OK: ${TOTAL} known RAID events are given \nLast event was: ${LAST}"
  112.      exit ${STATE_OK}
  113.   else
  114.      echo -e "CRITICAL: ${DELTA} new RAID events given!\nLast event was: ${LAST} - tmp: ${TEMP}"
  115.      echo "${DIFFS}"
  116.      exit ${STATE_CRITICAL}
  117.    fi
  118.  
  119.   }
  120.  
  121.   # resets
  122.   function fCheckReset()
  123.   {
  124.     # Reset state old file
  125.     if [ ! -f "${STATE}" ] ; then
  126.        touch "${STATE}"
  127.        { "${NRPE}" -t 60 -H "${HOST}" -p "${PORT}" -c check_raid_event | grep -Ev '(====|Date-Time|Device)' > "${STATE}"; } || die "Failed to get Cli output"
  128.     fi
  129.  
  130.     return 0
  131.   }
  132.  
  133.   # The main function.
  134.   function fMain()
  135.   {
  136.     # check for arguments:
  137.     [ "${ARGS}" = 3 ] || fShowUsage
  138.  
  139.     # check if host is a valid ip:
  140.     if ! ( echo "${HOST}" | grep -qE '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' ) ; then
  141.        die "Please enter a valid ip address for HOST value!"
  142.     fi
  143.  
  144.     # check if disks value is nummeric
  145.     VALUE=="$( echo "${DISKS}" | tr -d "[:digit:]")"
  146.     [ -n "${VALUE}" ] || die "DISKS value is not valid, please use a nummeric value"
  147.  
  148.     # check if nrpe is possible
  149.     if ! ( "${NRPE}" -t 60 -H "${HOST}" -p "${PORT}" | grep -q 'seem to be doing fine' ); then
  150.        die "Failed to connect to ${HOST}"
  151.     fi
  152.  
  153.     # Do the Magic:
  154.      #get options and set vars
  155.       case "${ARG1}" in
  156.  
  157.         status)
  158.           fRunStatus
  159.           ;;
  160.         event)
  161.           fRunEvent
  162.           ;;
  163.         help)
  164.           fShowUsage
  165.           ;;
  166.         *)
  167.           fShowUsage
  168.           ;;
  169.       esac
  170.   }
  171.  
  172.  
  173.  
  174.  # Start the program:
  175.   fMain
  176.  
  177.  # Exit with previous return code:
  178.   exit "${?}"
Advertisement
Add Comment
Please, Sign In to add comment