#!/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 STATUNITS=`/sbin/sysctl -n kern.clockrate | cut -f15 -d' '` 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 PERCENT=$(($NCPU*100)) CDEF="$STATUNITS,/,$PERCENT,*" fi # SYSWARNING=$PERCENT*30/100 # SYSCRITICAL=$PERCENT*50/100 # INTWARNING=$PERCENT*80/100 # USRWARNING=$PERCENT*80/100 # SPINWARNING=$PERCENT*80/100 echo 'graph_title CPU usage' echo 'graph_order system interrupt user nice spin 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 'spin.label nice' echo 'spin.draw STACK' echo 'spin.max 5000' echo 'spin.type DERIVE' echo 'spin.info CPU time spent in spin locks' echo 'spin.min 0' echo "spin.cdef spin,$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 NCPU=$(/sbin/sysctl -n hw.ncpu) set -- $(/sbin/sysctl -n kern.cp_time | sed 's/,/ /g') echo user.value $(($1*NCPU)) echo nice.value $(($2*NCPU)) echo system.value $(($3*NCPU)) echo spin.value $(($4*NCPU)) echo interrupt.value $(($5*NCPU)) echo idle.value $(($6*NCPU))