====== My Monitor (CHANGEME) ====== ^ Author | [[ butchdeal@yahoo.com | Butch Deal ]] | ^ Compatibility | Xymon 4.2 | ^ Requirements | unix, dmidecode for linux | ^ Download | None | ^ Last Update | 2009-06-02 | ===== Description ===== Monitors lots of extra CPU and system related bits. Works on Linux (RH & SuSe), Solaris, and now MacOS X (Darwin). Removed the need to install prtdiag on Linux, and added more complete relese version info. Added some support for Solaris 10 zones and for dual core Ultra sparc IV. ===== Installation ===== === Client side === add these lines to hobbitclient.cfg: UNAME="/bin/uname" SWAP="/usr/sbin/swap" PSRINFO="/usr/sbin/psrinfo" MPSTAT="/usr/bin/mpstat" Modify your clientlaunch.cfg, adding: [cpu2] ENVFILE $HOBBITCLIENTHOME/etc/hobbitclient.cfg CMD $HOBBITCLIENTHOME/ext/cpu2.sh LOGFILE $HOBBITCLIENTHOME/logs/cpu2.log INTERVAL 5m edit cpu2.sh for proper path to sudo and dmidecode. Set up sudo so that dmidecode can be run without password. (script tried both /usr/local/bin/sudo and /usr/bin/sudo). === Server side === ===== Source ===== ==== cpu2.sh ==== #!/bin/sh # # bb-cpu2.sh: Sun Enterprise Server check - BB external script test # ^ and now Linux # ##### Purpose is to report back to a central server, all "standard" ##### detailed information about network, disk, volume, cpu, memory ##### which is not reported thru regular "easy" checks. ##### # # version 1.0 # version 2.0 - includes uname and prtdiag checks too # version 2.1 - properly uses $CAT instead of cat # version 2.2 - properly uses $MACHINE instead of `uname -n` in bb-hosts check # version 2.4 - properly uses $THIS_HOST instead of $MACHINE due to fqdn using # comma in name - thanks Craig Cook # version 3.0 - updates to work properly with BB 1.6 # properly uses `uname -i` for platform check on E10K # version 3.1 - changed /tmp to $BBTMP # cpu2 to $TEST # $THIS_HOST to $MACHINE # removed code that checked for the existence of "cpu2" # after the server name in bb-hosts # moved comment explaining purpose of script to start of code # removed
statements # version 3.2 - made swap check optional # Applied Todd Jimenez style get_header and get_footer functions # added check for bbsys.local vars being set # changed wc to $WC # restored functionality to check for the existence of "cpu2" # after the server name in bb-hosts, but now optional # changed &red and &yellow to variables # version 3.3 - Added changes suggested by Andrew Clarke # - skip tests that involve uname -x on solaris 2.5.1, since it # does not support this switch. # - [ "SWAP_INFO" = "Y" ] was missing a $ # - new comment line for testing # - swap -s on solaris 2.51 returns "1" # version 3.5 - Added support for Linux # - physical cpu count for both Solaris and Linux # - OS release information for both Solaris and Linux # - have not tested SWAP_INFO for Linux # version 3.6 - Added some support for Mac OS X (Darwin) # - modularised some of the procedures # - removed need for prtdiag on Linux # version 3.9 - Added some support for Solaris zones # - added support for dual core Ultra sparc IV # version 3.9.1 - started support for Sun4v Niagara chips # version 3.10 - Added more dmidecode entries # # BIG BROTHER / XXXXXXXXXXXXXXXX status # # Written by Paul A. Luzzi # on March 22, 2000 # # 3.0 Updates by David Levin # on January 3, 2001 # # 3.1 Updates by Craig Cook 26 Apr 2001 # 3.2 Updates by Craig Cook 31 Oct 2001 # 3.3 Updates by Craig Cook 21 Nov 2001 # 3.5 Updates by Richard Deal & Dan Gomez 1 Oct 2004 # 3.6 Updates by Richard Deal 6 Oct 2004 # 3.7 Updates by Daniel Gomez 6 Dec 2004 - update paths # 3.8 Updates by Daniel Gomez 8/2/05- added /etc/*release # 3.9 Updates by Richard Deal 9/1/05 # 3.10 Updates by Daniel Gomez 8/18/07 ######################################## # NOTE # This has been tested with BB 1.8c and 1.9e # # Tested on : # Sun Solaris, Linux, Darwin ######################################## ########################################################################### # INSTALLATION # step 1 - update bb-bbexttab to include this bb-cpu2.sh # (older BB versions update EXT section of the bbdef.sh script) # # step 2 - if you want this script to show swap info uncomment # SWAP_INFO="Y" # NOTE: it does not do any error checking on swap space though # # step 3 - copy lines mentioned to bbsys.local (without the #'s) # # step 4 - if you are using an older version of BB without bb-bbexttab # and you don't want this run on every client uncomment # CHECK_BB_HOSTS="Y" and add the name of this $TEST to # bb-hosts for this client. eg. # myserver1.domain.com # cpu2 # # step 5 - restart Big Brother # # *Linux* # install dmidecode to determin actual CPU count # # NOTE - the TEST variable in the configuration section, this is the name # used as the column header and in the BB-HOSTS file. ########################################################################### ########################################################################### # For testing, ensure BBHOME is set and uncomment the following line # BB=""; BBDISP="echo" ########################################################################### ################################## # CONFIGURE IT HERE ################################## TEST="cpu2" BBPROG="$0"; export BBPROG VERSION="
- ID: bb-cpu2.sh, v 3.10 2007/08/24 -
" # # Start of lines to put in bbsys.local for Solaris # # SWAP="/usr/sbin/swap" # PSRINFO="/usr/sbin/psrinfo" # MPSTAT="/usr/bin/mpstat" # UNAME="/sbin/uname" # PLATFORM_SPEC=`$UNAME -i` # PRTDIAG_COMMAND="/usr/platform/$PLATFORM_SPEC/sbin/prtdiag" # PRTDIAG_OPT="-v" # export SWAP PSRINFO MPSTAT UNAME # # Start of lines to put in bbsys.local for Linux # # SWAP="/sbin/swapon" # PSRINFO="cat /proc/cpuinfo" # MPSTAT="/usr/bin/mpstat -P ALL" # UNAME="/bin/uname" # export SWAP PSRINFO MPSTAT UNAME # # For Linux this determins actual cpu count # you can use sudo to run dmidecode if need be # if [ -x "/usr/local/bin/sudo" ]; then DMIDECODE="/usr/local/bin/sudo /usr/sbin/dmidecode" else DMIDECODE="/usr/bin/sudo /usr/sbin/dmidecode" fi #DMIDECODE="/usr/local/bin/sudo /usr/sbin/dmidecode" # # Start of lines to put in bbsys.local for Mac OS X Darwin # # UNAME="/usr/bin/uname" # export UNAME # # End of lines to put in bbsys.local # # define colours for graphics RED_PIC="&red" YELLOW_PIC="&yellow" # don't scan through bb-hosts every time # this is here for older BB versions without bb-bbexttab # uncomment to activate #CHECK_BB_HOSTS=Y # Uncomment to display swap info #SWAP_INFO="Y" ################################## # Start of script ################################## if test ! "$BBHOME" then echo "template: BBHOME is not set" exit 1 fi if test ! -d "$BBHOME" then echo "template: BBHOME is invalid" exit 1 fi if test ! "$BBTMP" # GET DEFINITIONS IF NEEDED then # echo "*** LOADING BBDEF ***" . $BBHOME/etc/bbdef.sh # INCLUDE STANDARD DEFINITIONS fi # # Define header # get_header() { echo "" echo "$1 ($2 $3)" echo "" #If you do not want the header in a bigger font use line below instead # echo "$1 ($2 $3)" } # # Define footer # get_footer() { #echo "

" echo "" } # # Mac OS X Darwin prtdiag cpu info # darwin_prtdiag() { printf "CPU\tCPU MHz L2/L3 Cache CPU Model CPU Type\n" printf "%b---\t------- ------------- --------- --------\n" CPUSPEED=`system_profiler SPHardwareDataType | $GREP "CPU Speed" | cut -d ":" -f 2-` L2CACHE=`system_profiler SPHardwareDataType | $GREP "L2 Cache" | cut -d ":" -f 2-` L3CACHE=`system_profiler SPHardwareDataType | $GREP "L3 Cache" | cut -d ":" -f 2-` CPU_MODEL=`system_profiler SPHardwareDataType | $GREP "CPU Type" | $AWK {'print $4'}` CPU_TYPE=`hostinfo | $GREP "Processor type" | $AWK {'print $3'}` for i in `hostinfo | grep active | cut -d : -f 2-` ; do printf " $i\t$CPUSPEED\t $L2CACHE /$L3CACHE\t$CPU_MODEL\t$CPU_TYPE\n" done } # end darwin_prtdiag # # Linux prtdiag cpu info # linux_prtdiag() { printf "CPU\t CPU MHz CACHE (KB) Bogomips\n" printf "%b---\t --------- ---------- -------- \n" for i in `grep "^[^*]*processor" /proc/cpuinfo | grep -v "ID" |cut -d ":" -f 2| perl -pe 's/^\s+//'`; do CPULINE=`grep processor /proc/cpuinfo |grep -v "Physical" |grep -w $i` CPUSPEED=`grep -A20 -w "$CPULINE" /proc/cpuinfo |grep "cpu MHz" | cut -d " " -f 3-` CPUCACHE=`grep -A20 -w "$CPULINE" /proc/cpuinfo |grep "cache size" | cut -d " " -f 3-` BOGOMIPS=`grep -A20 -w "$CPULINE" /proc/cpuinfo |grep "bogomips" | cut -d " " -f 2` CPUARCH=`grep -A20 -w "$CPULINE" /proc/cpuinfo |grep "model name" | cut -d " " -f 3-` printf " $i\t $CPUSPEED\t $CPUCACHE\t$BOGOMIPS \t$CPUARCH\n" done } # end linux_prtdiag # Get Setup - check environment get_setup () { ##### ##### Setup any and all variables before beginning. ##### # Check defaults have been set if [ "$UNAME" = "" ]; then if [ $BBOSTYPE = "darwin" ] ; then UNAME="/usr/bin/uname" else UNAME="/bin/uname" fi echo "" echo "$YELLOW_PIC UNAME command is not defined in etc/bbsys.local - using default: $UNAME" fi if [ $BBOSTYPE != "darwin" ] ; then if [ "$SWAP" = "" ]; then SWAP="/usr/sbin/swap" echo "" echo "$YELLOW_PIC SWAP command is not defined in etc/bbsys.local - using default: $SWAP" fi if [ "$PSRINFO" = "" ]; then PSRINFO="/usr/sbin/psrinfo" echo "" echo "$YELLOW_PIC PSRINFO command is not defined in etc/bbsys.local - using default: $PSRINFO" fi if [ "$MPSTAT" = "" ]; then if [ `$UNAME -s` = "Linux" ] ; then MPSTAT="/usr/bin/mpstat -P ALL" else MPSTAT="/usr/bin/mpstat" fi echo "" echo "$YELLOW_PIC MPSTAT command is not defined in etc/bbsys.local - using default: $MPSTAT" fi if [ `$UNAME -s` != "Linux" ] ; then if [ "$PLATFORM_SPEC" = "" ]; then PLATFORM_SPEC=`$UNAME -i` fi if [ "$PRTDIAG_COMMAND" = "" ]; then PRTDIAG_COMMAND="/usr/platform/$PLATFORM_SPEC/sbin/prtdiag" fi if [ "$PRTDIAG_OPT" = "" ]; then PRTDIAG_OPT="-v" echo "" echo "$YELLOW_PIC PRTDIAG_OPT is not defined in etc/bbsys.local - using default: $PRTDIAG_OPT" fi fi fi # end if darwin export COLOR } # end get_setup get_procinfo () { ##### ##### List CPU Info. ##### case $BBOSTYPE in darwin ) get_header "Processor Info" "hostinfo" NUM_PROCS=`hostinfo | grep "physically available" | $AWK {'print $1'}` hostinfo | $GREP -A3 "configured" get_footer ;; solaris ) CATCH_COMMAND=` $PSRINFO ` get_header "Processor Info" "$PSRINFO" NUM_PROCS=` $PSRINFO | $WC -l ` if [ "$?" = "0" ]; then ON_LINES=`$PSRINFO | $EGREP "on-line|no-intr" | $WC -l` if [ "$NUM_PROCS" = "$ON_LINES" ]; then echo "$CATCH_COMMAND" else COLOR="red" echo "$RED_PIC Only $ON_LINES of $NUM_PROCS on-line" echo "$CATCH_COMMAND" fi else COLOR="red" echo "$RED_PIC Problem with some/all processors !!!" fi get_footer ;; linux | redhat | debian | \ * ) ;; esac export COLOR } # end get_procinfo get_mpstat () { ##### ##### List more CPU Info. ##### if [ $BBOSTYPE != "darwin" ] ; then CATCH_COMMAND=` $MPSTAT ` get_header "mpstat info" "$MPSTAT" if [ "$?" = "0" ]; then echo "$CATCH_COMMAND" else COLOR="red" echo "$RED_PIC Problem with some/all processors !!!" fi get_footer fi export COLOR } # end get_mpstat get_prtdiag () { ##### ##### List still more CPU Info. ##### if [ "$OS_REL" != "5.5.1" ] ; then # Solaris 2.5.1 does not support -X on uname, so skip this test case $BBOSTYPE in darwin ) get_header "prtdiag info" "from system_profiler and hostinfo" ECHO_COMMAND=`darwin_prtdiag` ;; solaris ) ZONENAME=/usr/bin/zonename if [ -s "$ZONENAME" ]; then ZONE=`$ZONENAME` else ZONE="global" fi if [ "$ZONE" != "global" ] ; then get_header "Sub-zone" "$ZONE" else get_header "prtdiag info" "$PRTDIAG_COMMAND $PRTDIAG_OPT \| $AWK '/CPU.*.CPU/, /^$/ {print $0}'" if [ -s "$PRTDIAG_COMMAND" ]; then ECHO_COMMAND=` $PRTDIAG_COMMAND $PRTDIAG_OPT | $AWK '/CPU.*.CPU/, /^$/ {print $0}' | $GREP -v "^$" ` CATCH_COMMAND=` $PRTDIAG_COMMAND $PRTDIAG_OPT | $AWK '/CPU.*.CPU/, /^$/ {print $0}' | $GREP -v "^$" | $TAIL +4 ` CONFIGURED_PROCS=` $PRTDIAG_COMMAND $PRTDIAG_OPT | $AWK '/CPU.*.CPU/, /^$/ {print $0}' | $GREP -v "^$" | $TAIL +4 | $WC | $AWK '{print $NF}' ` if [ "$OS_REL" = "5.10" ] ; then # Solaris 10 supports psrinfo -p and Sparc IV chips INSTALLED_CHIPS=` $PSRINFO -p` INSTALLED_PROCS=` $PSRINFO -p` else INSTALLED_PROCS=` $UNAME -X | $GREP NumCPU | $AWK '{print $NF}' ` fi else echo "No prtdiag installed on this platform - $PLATFORM_SPEC" fi fi ;; linux | redhat | debian | \ * ) get_header "prtdiag info" "from /proc/cpuinfo" ECHO_COMMAND=`linux_prtdiag` ;; esac if [ `$UNAME -m` != "sun4v" ] ; then if [ "$CONFIGURED_PROCS" != "$INSTALLED_PROCS" ]; then COLOR="red" echo "$RED_PIC psrinfo reports $INSTALLED_PROCS installed processors, but prtdiag shows only $CONFIGURED_PROCS present." echo "Some processors seem to be offline or problematic !!!" # else # echo "$ECHO_COMMAND" fi fi echo "$ECHO_COMMAND" get_footer fi export COLOR } # end get_prtdiag get_sysinfo () { case $BBOSTYPE in darwin ) get_header "uname info" "hostinfo" echo "Node = `$UNAME -n`" NUM_PROCS=`hostinfo | grep "physically available" | $AWK {'print $1'}` echo "Physical CPUs = $NUM_PROCS" system_profiler SPSoftwareDataType | $GREP "System Version" $UNAME -v get_footer ;; solaris ) get_header "uname info" "$UNAME -X | $EGREP Node|NumCPU" if [ "$OS_REL" != "5.5.1" ] ; then # Solaris 2.5.1 does not support -X on uname, so skip this test CATCH_COMMAND=` $UNAME -X | $EGREP "Node|NumCPU" ` if [ "$?" = "0" ]; then echo "$CATCH_COMMAND" else COLOR="red" echo "$RED_PIC Problem with uname command. Cant determine installed processor count !!!" fi if [ "$OS_REL" = "5.10" ] ; then echo "Chips = $INSTALLED_CHIPS" fi fi $GREP Solaris /etc/release get_footer ;; linux | redhat | debian | \ * ) get_header "uname info" "$UNAME -X | $EGREP Node|NumCPU" echo "Node = `$UNAME -n`" echo "System CPUs = `$GREP processor /proc/cpuinfo | grep -v Physical | $WC -l`" if [ "$DMIDECODE" != "" ]; then echo "Physical CPUs = `$DMIDECODE | grep "Central Processor" | wc -l`" MANUFACTURER=` $DMIDECODE -s system-manufacturer` echo "System Manufacturer = $MANUFACTURER" echo "System Product Name = `$DMIDECODE -s system-product-name`" echo "System Serial Number = `$DMIDECODE -s system-serial-number`" echo "Chassis Serial Number = `$DMIDECODE -s chassis-serial-number`" echo "BIOS Version = `$DMIDECODE -s bios-version`" fi echo "Boot Command = `$CAT /proc/cmdline`" echo "Kernel Version = `$CAT /proc/version`" echo "Version Release:" $CAT /etc/*release ;; esac export COLOR } # end get_sysinfo ##### ##### Get Status proc - used to get all responses ##### get_swap() { ##### ##### System Swap and Memory Monitoring ##### if [ "$SWAP_INFO" = "Y" ]; then get_header "Swap Info" "$SWAP -l and $SWAP -s" CATCH_COMMAND1=` $SWAP -l ` if [ "$?" = "0" ]; then echo "$CATCH_COMMAND1" else COLOR="red" echo "$RED_PIC Problem with swap !!!" fi # This is the "normal" return value on sucess RETURN_VAL=0 if [ "$OS_REL" = "5.5.1" ] ; then # Solaris 2.51 returns "1" from "swap -s"!! RETURN_VAL=1 fi CATCH_COMMAND2=` $SWAP -s ` if [ "$?" = "$RETURN_VAL" ]; then echo "$CATCH_COMMAND2" else COLOR="red" echo "$RED_PIC Problem with swap !!!" fi fi export COLOR } # end get_swap ##### ##### Setup some variables for use later ##### COLOR="green" OS_REL=` $UNAME -r ` ##### ##### Main body ##### if [ "$CHECK_BB_HOSTS" = "Y" ]; then # convert "," to "." in the hostname MACHINE_WITH_DOTS=`echo $MACHINE | $SED 's/,/\./g'` $GREP $MACHINE_WITH_DOTS $BBHOSTS | $GREP "$TEST" | while read line do if [ ! -z "$line" ]; then get_status > $BBTMP/$MACHINE.$TEST # NOW USE THE BB COMMAND TO SEND THE DATA ACROSS $BB $BBDISP "status $BBTMP/$MACHINE.$TEST $COLOR `$DATE` `$CAT $BBTMP/$MACHINE.$TEST` " fi done else get_setup > $BBTMP/$MACHINE.$TEST get_procinfo >> $BBTMP/$MACHINE.$TEST get_mpstat >> $BBTMP/$MACHINE.$TEST get_prtdiag >> $BBTMP/$MACHINE.$TEST get_sysinfo >> $BBTMP/$MACHINE.$TEST if [ "$SWAP_INFO" = "Y" ]; then get_swap >> $BBTMP/$MACHINE.$TEST fi # NOW USE THE BB COMMAND TO SEND THE DATA ACROSS #COLOR="green" # hard code to green till finished. $BB $BBDISP "status $MACHINE.$TEST $COLOR `$DATE` `$CAT $BBTMP/$MACHINE.$TEST` $VERSION" fi # Clean up our mess # Checking for existence of files since the whole test may be optional # and may not actually run on every client # if [ -f $BBTMP/$MACHINE.$TEST ]; then $RM $BBTMP/$MACHINE.$TEST fi ############################################## # end of script ##############################################
===== Known Bugs and Issues ===== ===== To Do ===== ===== Credits ===== * Paul A. Luzzi * David Levin * Craig Cook * Butch Deal * Daniel Gomez ===== Changelog ===== * **2000-03-22** * Initial release ....... * version 3.5 - Added support for Linux - physical cpu count for both Solaris and Linux - OS release information for both Solaris and Linux - have not tested SWAP_INFO for Linux * version 3.6 - Added some support for Mac OS X (Darwin) - modularised some of the procedures - removed need for prtdiag on Linux * version 3.9 - Added some support for Solaris zones - added support for dual core Ultra sparc IV * version 3.9.1 - started support for Sun4v Niagara chips * version 3.10 - Added more dmidecode entries