====== 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