#!/bin/bash # # CPU usage monitor plugin for Nagios # Written by Vinicius Figueiredo (viniciusfs@gmail.com) # Last Modified: 27-11-2007 # # Usage: ./check_cpu # # Description: # This plugin check how much percentage of CPU in the system is in use. # Tested only in Linux (Debian, Ubuntu, CentOS and Red Hat Enterprise) # and Solaris 8/9. # ####################################################################### STATE_OK=0 STATE_WARNING=1 STATE_CRITICAL=2 STATE_UNKNOWN=3 CPU_IDLE=0 CPU_INUSE=0 print_help() { echo "CHECK_CPU - CPU usage monitor plugin for Nagios" echo "Copyright (c) 2007 Vinicius Figueiredo (viniciusfs@gmail.com)" echo "" echo "This script checks for CPU usage and generates an alarm when" echo "CPU usage is over threshold values." echo "" print_usage echo "" echo "Example: check_cpu 80 90" echo "" echo "This example will generates a warning alarm when CPU usage is over 80%" echo "and a critical alarm when CPU usage is over 90%." } print_usage() { echo "Usage: check_cpu " } case "$1" in --help|-h) print_help exit $STATE_OK ;; *) if [ $# -lt 2 ]; then print_usage exit $STATE_UNKNOWN elif [ $1 -ge $2 ]; then print_usage echo "Warning value must be greater than Critical value." exit $STATE_UNKNOWN elif [ $1 -lt 1 ] || [ $1 -gt 100 ] || [ $2 -lt 1 ] || [ $2 -gt 100 ]; then print_usage echo "Values are out of range [0-100]." exit $STATE_UNKNOWN fi ;; esac WARN=$1 CRIT=$2 OS=`uname -a | awk '{print $1}'` case "$OS" in Linux) CPU_IDLE=`vmstat 1 5 | tail -1 | awk '{ print $15 }'` ;; SunOS) CPU_IDLE=`vmstat 1 5 | tail -1 | awk '{ print $22 }'` ;; esac CPU_INUSE=$((100-$CPU_IDLE)) PERFDATA="cpu=$CPU_INUSE%;$WARN;$CRIT;0;100" if [ $CPU_INUSE -ge $CRIT ]; then echo "CPU CRITICAL - CPU usage in $CPU_INUSE%|$PERFDATA" exit $STATE_CRITICAL elif [ $CPU_INUSE -ge $WARN ]; then echo "CPU WARNING - CPU usage in $CPU_INUSE%|$PERFDATA" exit $STATE_WARNING else echo "CPU OK - CPU usage in $CPU_INUSE%|$PERFDATA" exit $STATE_OK fi