Skip to content
Snippets Groups Projects
Select Git revision
  • c3ac5fae69cc4dd8582e00ae7e490fa79accc740
  • master default protected
  • simple-task/7248-eol-check-add-node-22
  • 6877_check_iml_deployment
4 results

check_onevm

Blame
  • check_apache_requests 5.20 KiB
    #!/bin/bash
    # ======================================================================
    #
    # NAGIOS CLIENT CHECK :: apache requests
    #
    # ----------------------------------------------------------------------
    # script checks output of "/server-status" and counts scoreboard chars
    # ----------------------------------------------------------------------
    # 2020-04-09  v1.0  <axel.hahn@iml.unibe.ch>
    # 2021-03-11  v1.1  <axel.hahn@iml.unibe.ch>  more error checks for output data
    # 2021-11-18  v1.2  <axel.hahn@iml.unibe.ch>  add timeout and max tries; use localhost instead of FQDN
    # 2022-08-31  v1.3  <axel.hahn@iml.unibe.ch>  add help; shellfix corrections
    # 2022-08-31  v1.4  <axel.hahn@iml.unibe.ch>  add help; shellfix corrections
    # 2023-06-19  v1.5  <axel.hahn@unibe.ch>      no more tmpfile
    # 2023-07-27  v1.6  <axel.hahn@unibe.ch>      update help page
    # ======================================================================
    
    . $(dirname $0)/inc_pluginfunctions
    export self_APPVERSION=1.6
    
    # url=`hostname -f`/server-status
    url=localhost/server-status
    
    typeset -i iStart=0
    typeset -i iEnd
    typeset -i iCount=0
    
    typeset -i iSlots=0
    typeset -i iActive=0
    typeset -i iIdle=0
    typeset -i iUnused=0
    typeset -i iUsage=0
    
    paramsWget="-T 5 -t 1 --no-check-certificate"
    #            ^    ^
    #            |    tries = 1
    #            timeout in seconds
    
    # ----------------------------------------------------------------------
    # functions
    # ----------------------------------------------------------------------
    
    function showHelp(){
        local _self; _self=$(basename $0)
        cat <<EOF
    $( ph.showImlHelpHeader )
    
    Get Apache httpd server-status page $url.
    You get output with the server status and values for each slot type.
    
    The plugin sends performance data for
      - each slot type
      - active, idle, unused slots
    
    The response is UNKNOWN if url was not reached within 5 seconds or if
    the response does not contain a scoreboard.
    
    You get a WARNING if the count of used slots (excluding idle and unused 
    slots) is greater 75% of available slots.
    You get an CRITICAL response if it is greater 90% of available slots.
    
    Slot types of apache httpd:
        _ Waiting for Connection, 
        S Starting up, 
        R Reading Request
        W Sending Reply, 
        K Keepalive (read), 
        D DNS Lookup
        C Closing connection, 
        L Logging, 
        G Gracefully finishing
        I Idle cleanup of worker 
        . Open slot with no current process
    
    
    SYNTAX:
    $_self [-w WARN_LIMIT] [-c CRITICAL_LIMIT]
    
    OPTIONS:
    
        -w VALUE       warning level  (default: 75)
        -c VALUE       critical level (default: 90)
    
        -h or --help   show this help.
    
    PARAMETERS:
    
        None.
    
    
    EXAMPLE:
    $_self -w 60 -c 80
    
    EOF
    }
    
    # ----------------------------------------------------------------------
    # MAIN
    # ----------------------------------------------------------------------
    
    # --- check param -h
    case "$1" in
        "--help"|"-h")
            showHelp
            exit 0
            ;;
        *)
    esac
    
    # ----------------------------------------------------------------------
    # pre checks
    # ----------------------------------------------------------------------
    ph.require wget
    
    # ----------------------------------------------------------------------
    # check output
    # ----------------------------------------------------------------------
    
    # --- get /server-status page
    data=$( wget $paramsWget -O - $url 2>/dev/null )
    if [ $? -ne 0 ]; then
        ph.abort "UNKNOWN: request to url $url failed. $(wget $paramsWget -O - -S $url 2>&1)"
    fi
    
    # set default / override from command line params
    typeset -i iWarnLimit=$(     ph.getValueWithParam 75 w "$@")
    typeset -i iCriticalLimit=$( ph.getValueWithParam 90 c "$@")
    
    
    # --- extract scoreboard
    iStart=$( grep -n '<pre>'  <<< "$data" | cut -f 1 -d ':')
    iEnd=$(   grep -n '</pre>' <<< "$data" | cut -f 1 -d ':')
    
    if [ $iStart -eq 0 -o $iEnd -eq 0 ]; then
        ph.abort "UNKNOWN: url $url has no PRE tag for apache scroreboard. I guess it is not a server-status page."
    fi
    
    dataPre=$( sed -n "${iStart},${iEnd}p" <<< "$data" | sed 's#<.*>##g' | tr -d "\n" )
    
    
    # --- count slots in the scoreboard
    
    # total slots available
    iSlots=$( echo -n "$dataPre" | wc -m )
    
    if [ $iSlots -eq 0 ]; then
        ph.abort "UNKNOWN: url $url has no count of slots. I guess it is not a server-status page or option for Extended status is off."
    fi
    
    # running apache processes waiting for a request
    iIdle=iCount=$(echo -n "$dataPre" | sed -e "s/[^_]//g" | wc -m)
    
    # count of processes apache still can create
    iUnused=iCount=$(echo -n "$dataPre" | sed -e "s/[^\.]//g" | wc -m)
    
    # count of actively used slots
    iActive=$iSlots-$iIdle-$iUnused
    
    iUsage=$iActive*100/$iSlots
    ph.setStatusByLimit $iUsage $iWarnLimit $iCriticalLimit
    
    
    # --- output
    ph.status "Apache: $iSlots slots ...  active: $iActive  wait: $iIdle  unused: $iUnused ($iUsage % usage)"
    grep "^<dt" <<< "$data" | sed 's#<dt>##'| sed 's#</dt>##'
    echo
    
    # --- add performnce data
    ph.perfadd "apache-active"    "${iActive}" "" "" 0 $iSlots
    
    echo "Slots:"
    for mychar in S R W K D C L G I _ .
    do
      iCount=$(echo -n "$dataPre" | sed -e "s/[^${mychar}]//g" | wc -m)
      label=$(echo apache-${mychar} | tr [:upper:] [:lower:] | sed "s#_#idle#" | sed "s#\.#unused#")
    
      echo "  - ${mychar}: ${iCount}"
      ph.perfadd "${label}"    "${iCount}" "" "" 0 $iSlots
    done
    
    ph.exit
    
    # ----------------------------------------------------------------------