#!/bin/sh # # Plugin to monitor CPU usage. # # Usage: Place in /etc/munin/node.d/ (or link it there using ln -s) # # Parameters understood: # # config (required) # autoconf (optional - used by munin-config) # # Magic markers - optional - used by installation scripts and # munin-config: # #%# family=auto #%# capabilities=autoconf SYSCTL_BIN=$(command -v sysctl) if [ "$1" = "autoconf" ]; then if [ ! -z "$SYSCTL_BIN" ]; then $SYSCTL_BIN kern.cp_time > /dev/null if [ $? = "0" ]; then echo yes exit 0 else echo no exit 0 fi else echo no exit 0 fi fi if [ "$1" = "config" ]; then OSV=`$SYSCTL_BIN -n kern.osrelease | cut -f1 -d.` if [ "$OSV" = "4" ]; then STATUNITS=`$SYSCTL_BIN -n kern.clockrate | cut -f16 -d' '` elif [ "$OSV" -ge "5" ]; then STATUNITS=`$SYSCTL_BIN -n kern.clockrate | cut -f13 -d' '` fi PERCENT=`$SYSCTL_BIN -n hw.ncpu | awk '{print ($1)*100}'` NCPU=`$SYSCTL_BIN -n hw.ncpu` if [ "$scaleto100" = yes ]; then CDEF="$STATUNITS,/,100,*,$NCPU,/" PERCENT=100 else CDEF="$STATUNITS,/,100,*" PERCENT=$(($NCPU*100)) fi # SYSWARNING=$PERCENT*30/100 # SYSCRITICAL=$PERCENT*50/100 # INTWARNING=$PERCENT*80/100 # USRWARNING=$PERCENT*80/100 echo 'graph_title CPU usage' echo 'graph_order system interrupt user nice idle' echo "graph_args --base 1000 -r --lower-limit 0 --upper-limit $PERCENT " echo 'graph_vlabel %' echo 'graph_scale no' echo 'graph_info This graph shows how CPU time is spent.' echo 'graph_category system' echo 'graph_period second' echo 'system.label system' echo 'system.draw AREA' echo 'system.max 5000' echo 'system.type DERIVE' echo 'system.min 0' # echo "system.warning $SYSWARNING" # echo "system.critical $SYSCRITICAL" echo 'system.info CPU time spent by the kernel in system activities' echo "system.cdef system,$CDEF" echo 'interrupt.label interrupt' echo 'interrupt.draw STACK' echo 'interrupt.max 5000' # echo "interrupt.warning $INTWARNING" echo 'interrupt.type DERIVE' echo 'interrupt.min 0' echo 'interrupt.info CPU time spent by the kernel processing interrupts' echo "interrupt.cdef interrupt,$CDEF" echo 'user.label user' echo 'user.draw STACK' echo 'user.max 5000' # echo "user.warning $USRWARNING" echo 'user.type DERIVE' echo 'user.info CPU time spent by normal programs and daemons' echo 'user.min 0' echo "user.cdef user,$CDEF" echo 'nice.label nice' echo 'nice.draw STACK' echo 'nice.max 5000' echo 'nice.type DERIVE' echo 'nice.info CPU time spent by nice(1)d programs' echo 'nice.min 0' echo "nice.cdef nice,$CDEF" echo 'idle.label idle' echo 'idle.draw STACK' echo 'idle.max 5000' echo 'idle.type DERIVE' echo 'idle.info Idle CPU time' echo 'idle.min 0' echo "idle.cdef idle,$CDEF" exit 0 fi $SYSCTL_BIN kern.cp_time | awk '{ print "user.value " $2 "\nnice.value " $3 "\nsystem.value " $4 "\ninterrupt.value " $5 "\nidle.value " $6 }'