Author | Eric Meddaugh |
---|---|
Compatibility | Xymon 4.2 |
Requirements | Solaris 10 |
Download | None |
Last Update | 2009-10-26 |
Monitor zones status under Solaris 10.
[zonestat] ENVFILE $HOBBITCLIENTHOME/etc/hobbitclient.cfg CMD $HOBBITCLIENTHOME/ext/zonestat.sh LOGFILE $HOBBITCLIENTHOME/logs/zonestat.log INTERVAL 5m
# "rrddata" updates RRD files with information that arrives as "data" # messages. If you want RRD graphs of your monitoring BB data, then # you want to run this. [rrddata] ENVFILE /home/hobbit/server/etc/hobbitserver.cfg NEEDS hobbitd CMD hobbitd_channel --channel=data --log=$BBSERVERLOGS/rrd-data.log hobbitd_rrd --extra-tests=mpstat,zonestat --extra-script=/home/hobbit/server/ext/rrd_data.pl --rrddir=$BBVAR/rrd
<note>Step 1 is not needed if you have the mpstat monitor installed.</note>
0.0.0.0 myserver # "TRENDS:*,zonestat:zonestatcpu|zonestatmem|zonestatnproc|zonestatsize|zonersssize"
Show Code ⇲
Hide Code ⇱
[zonestatcpu] TITLE Zone % CPU YAXIS % CPU FNPATTERN zonestat.(.*).rrd -u 100 -r DEF:c@RRDIDX@=@RRDFN@:cpu:AVERAGE LINE1:c@RRDIDX@#@COLOR@:@RRDPARAM@ GPRINT:c@RRDIDX@:LAST: \: %5.1lf (cur) GPRINT:c@RRDIDX@:MAX: \: %5.1lf (max) GPRINT:c@RRDIDX@:MIN: \: %5.1lf (min) GPRINT:c@RRDIDX@:AVERAGE: \: %5.1lf (avg)\n [zonestatmem] TITLE Zone % Memory YAXIS % Memory FNPATTERN zonestat.(.*).rrd -u 100 -r DEF:m@RRDIDX@=@RRDFN@:memory:AVERAGE LINE1:m@RRDIDX@#@COLOR@:@RRDPARAM@ GPRINT:m@RRDIDX@:LAST: \: %5.1lf (cur) GPRINT:m@RRDIDX@:MAX: \: %5.1lf (max) GPRINT:m@RRDIDX@:MIN: \: %5.1lf (min) GPRINT:m@RRDIDX@:AVERAGE: \: %5.1lf (avg)\n [zonestatnproc] TITLE Zone Num Proces YAXIS # FNPATTERN zonestat.(.*).rrd DEF:p@RRDIDX@=@RRDFN@:nproc:AVERAGE LINE1:p@RRDIDX@#@COLOR@:@RRDPARAM@ GPRINT:p@RRDIDX@:LAST: \: %5.1lf (cur) GPRINT:p@RRDIDX@:MAX: \: %5.1lf (max) GPRINT:p@RRDIDX@:MIN: \: %5.1lf (min) GPRINT:p@RRDIDX@:AVERAGE: \: %5.1lf (avg)\n [zonestatsize] # This graph only works on some OS'es (Solaris) TITLE Zone Memory Utilization YAXIS Size MB FNPATTERN zonestat.(.*).rrd DEF:s@RRDIDX@=@RRDFN@:size:AVERAGE LINE1:s@RRDIDX@#@COLOR@:@RRDPARAM@ GPRINT:s@RRDIDX@:LAST: \: %5.1lf (cur) GPRINT:s@RRDIDX@:MAX: \: %5.1lf (max) GPRINT:s@RRDIDX@:MIN: \: %5.1lf (min) GPRINT:s@RRDIDX@:AVERAGE: \: %5.1lf (avg)\n [zonersssize] # This graph only works on some OS'es (Solaris) TITLE Zone Resident Set Size YAXIS Size MB FNPATTERN zonestat.(.*).rrd DEF:s@RRDIDX@=@RRDFN@:rss:AVERAGE LINE1:s@RRDIDX@#@COLOR@:@RRDPARAM@ GPRINT:s@RRDIDX@:LAST: \: %5.1lf (cur) GPRINT:s@RRDIDX@:MAX: \: %5.1lf (max) GPRINT:s@RRDIDX@:MIN: \: %5.1lf (min) GPRINT:s@RRDIDX@:AVERAGE: \: %5.1lf (avg)\n
Show Code ⇲
Hide Code ⇱
#!/bin/sh ZONE="global" if [ -x "/bin/zonename" ] ; then ZONE=`/bin/zonename` fi if [ "${ZONE}" != "global" ] ; then exit 0 fi OS=`uname -r` REV=`echo "${OS}" | awk -F'.' '{printf $2}'` # only run Solaris 10 if [ ${REV} -lt 10 ] ; then exit 0 fi ZONELIST=`zoneadm list -v | egrep -v NAME | awk '{printf $1","}'` ZONECNT=`zoneadm list -v | egrep -vc NAME` ZONES=`zoneadm list -v | egrep -v NAME | awk '{printf $2" "}'` NUM=`echo "${ZONECNT} + 5" | /bin/bc` ZONENUM=`echo "${ZONECNT} + 2" | /bin/bc` # only run if we actually are using zones if [ ${ZONECNT} -le 1 ] ; then exit 0 fi nohup sh -c "prstat -n 1,${NUM} -Zz ${ZONELIST} -c 300 2 1>$BBTMP/hobbit_zonestat.$MACHINEDOTS.$$ 2>&1; mv $BBTMP/hobbit_zonestat.$MACHINEDOTS.$$ $BBTMP/hobbit_zonestat.$MACHINEDOTS" </dev/null >/dev/null 2>&1 & sleep 5 if [ -f "$BBTMP/hobbit_zonestat.$MACHINEDOTS" ] ; then cat $BBTMP/hobbit_zonestat.$MACHINEDOTS | tail -${ZONENUM} | egrep -v "ZONEID|processes" > $BBTMP/hobbit_zonestat.$MACHINEDOTS.work echo "ZONEs: ${ZONES}" > $BBTMP/hobbit_zonestat.$MACHINEDOTS.send while read ZONEID NPROC SIZE RSS MEMORY TIME CPU ZONE ; do if [ `echo "${SIZE}" | egrep -c "G"` -ge 1 ] ; then SIZE=`echo "${SIZE}" | sed -e's/G//'` SIZE=`echo "${SIZE} * 1024" | /bin/bc -l` elif [ `echo "${SIZE}" | egrep -c "M"` -ge 1 ] ; then SIZE=`echo "${SIZE}" | sed -e's/M//'` elif [ `echo "${SIZE}" | egrep -c "K"` -ge 1 ] ; then SIZE=`echo "${SIZE}" | sed -e's/K//'` SIZE=`echo "${SIZE} / 1024" | /bin/bc -l` fi if [ `echo "${RSS}" | egrep -c "G"` -ge 1 ] ; then RSS=`echo "${RSS}" | sed -e's/G//'` RSS=`echo "${RSS} * 1024" | /bin/bc -l` elif [ `echo "${RSS}" | egrep -c "M"` -ge 1 ] ; then RSS=`echo "${RSS}" | sed -e's/M//'` elif [ `echo "${RSS}" | egrep -c "K"` -ge 1 ] ; then RSS=`echo "${RSS}" | sed -e's/K//'` RSS=`echo "${RSS} / 1024" | /bin/bc -l` fi MEMORY=`echo "${MEMORY}" | sed -e's/\%//'` CPU=`echo "${CPU}" | sed -e's/\%//'` echo "${ZONE}nproc: ${NPROC}" >> $BBTMP/hobbit_zonestat.$MACHINEDOTS.send echo "${ZONE}size: ${SIZE}" >> $BBTMP/hobbit_zonestat.$MACHINEDOTS.send echo "${ZONE}rss: ${RSS}" >> $BBTMP/hobbit_zonestat.$MACHINEDOTS.send echo "${ZONE}memory: ${MEMORY}" >> $BBTMP/hobbit_zonestat.$MACHINEDOTS.send echo "${ZONE}cpu: ${CPU}" >> $BBTMP/hobbit_zonestat.$MACHINEDOTS.send done < $BBTMP/hobbit_zonestat.$MACHINEDOTS.work $BB $BBDISP "data $MACHINE.zonestat `$CAT $BBTMP/hobbit_zonestat.$MACHINEDOTS.send` " /bin/rm -f $BBTMP/hobbit_zonestat.$MACHINEDOTS.send /bin/rm -f $BBTMP/hobbit_zonestat.$MACHINEDOTS.work /bin/rm $BBTMP/hobbit_zonestat.$MACHINEDOTS fi exit 0
Show Code ⇲
Hide Code ⇱
#!/bin/sh #### This is an alternate zonestat.sh which handles reporting the zones as individual hosts. #### You will need this entry in your sudoers to allow hobbit to zlogin to the zones: # hobbit ALL = NOPASSWD: /usr/sbin/zlogin SECS=300 ZONE="global" if [ -x "/bin/zonename" ] ; then ZONE=`/bin/zonename` fi if [ "${ZONE}" != "global" ] ; then exit 0 fi OS=`uname -r` REV=`echo "${OS}" | awk -F'.' '{printf $2}'` # only run Solaris 10 if [ ${REV} -lt 10 ] ; then exit 0 fi ZONELIST=`zoneadm list -v | egrep -v NAME | awk '{printf $1","}'` ZONECNT=`zoneadm list -v | egrep -vc NAME` ZONES=`zoneadm list -v | egrep -v NAME | awk '{printf $2" "}'` NUM=`echo "${ZONECNT} + 5" | /bin/bc` ZONENUM=`echo "${ZONECNT} + 2" | /bin/bc` # only run if we acutally are using zones if [ ${ZONECNT} -le 1 ] ; then exit 0 fi nohup sh -c "prstat -n 1,${NUM} -Zz ${ZONELIST} -c ${SECS} 2 1>$BBTMP/hobbit_zonestat.$MACHINEDOTS.$$ 2>&1; mv $BBTMP/hobbit_zonestat.$MACHINEDOTS.$$ $BBTMP/hobbit_zonestat.$MACHINEDOTS" </dev/null >/dev/null 2>&1 & sleep 5 if [ -f "$BBTMP/hobbit_zonestat.$MACHINEDOTS" ] ; then cat $BBTMP/hobbit_zonestat.$MACHINEDOTS | tail -${ZONENUM} | egrep -v "ZONEID|processes" > $BBTMP/hobbit_zonestat.$MACHINEDOTS.work echo "ZONEs: ${ZONES}" > $BBTMP/hobbit_zonestat.$MACHINEDOTS.send while read ZONEID NPROC SIZE RSS MEMORY TIME CPU ZONE ; do if [ `echo "${SIZE}" | egrep -c "G"` -ge 1 ] ; then SIZE=`echo "${SIZE}" | sed -e's/G//'` SIZE=`echo "${SIZE} * 1024" | /bin/bc -l` elif [ `echo "${SIZE}" | egrep -c "M"` -ge 1 ] ; then SIZE=`echo "${SIZE}" | sed -e's/M//'` elif [ `echo "${SIZE}" | egrep -c "K"` -ge 1 ] ; then SIZE=`echo "${SIZE}" | sed -e's/K//'` SIZE=`echo "${SIZE} / 1024" | /bin/bc -l` fi if [ `echo "${RSS}" | egrep -c "G"` -ge 1 ] ; then RSS=`echo "${RSS}" | sed -e's/G//'` RSS=`echo "${RSS} * 1024" | /bin/bc -l` elif [ `echo "${RSS}" | egrep -c "M"` -ge 1 ] ; then RSS=`echo "${RSS}" | sed -e's/M//'` elif [ `echo "${RSS}" | egrep -c "K"` -ge 1 ] ; then RSS=`echo "${RSS}" | sed -e's/K//'` RSS=`echo "${RSS} / 1024" | /bin/bc -l` fi MEMORY=`echo "${MEMORY}" | sed -e's/\%//'` CPU=`echo "${CPU}" | sed -e's/\%//'` echo "${ZONE}nproc: ${NPROC}" >> $BBTMP/hobbit_zonestat.$MACHINEDOTS.send echo "${ZONE}size: ${SIZE}" >> $BBTMP/hobbit_zonestat.$MACHINEDOTS.send echo "${ZONE}rss: ${RSS}" >> $BBTMP/hobbit_zonestat.$MACHINEDOTS.send echo "${ZONE}memory: ${MEMORY}" >> $BBTMP/hobbit_zonestat.$MACHINEDOTS.send echo "${ZONE}cpu: ${CPU}" >> $BBTMP/hobbit_zonestat.$MACHINEDOTS.send done < $BBTMP/hobbit_zonestat.$MACHINEDOTS.work for ZONE in ${ZONES} ; do if [ "${ZONE}" = "global" ] ; then continue fi echo "ZONEs: ${ZONE}" > $BBTMP/hobbit_zonestat.$ZONE.send /usr/sbin/zoneadm -z ${ZONE} list -v > $BBTMP/hobbit_zonestatus.$ZONE.send egrep "^${ZONE}nproc:" $BBTMP/hobbit_zonestat.$MACHINEDOTS.send >> $BBTMP/hobbit_zonestat.$ZONE.send egrep "^${ZONE}size:" $BBTMP/hobbit_zonestat.$MACHINEDOTS.send >> $BBTMP/hobbit_zonestat.$ZONE.send egrep "^${ZONE}memory:" $BBTMP/hobbit_zonestat.$MACHINEDOTS.send >> $BBTMP/hobbit_zonestat.$ZONE.send egrep "^${ZONE}cpu:" $BBTMP/hobbit_zonestat.$MACHINEDOTS.send >> $BBTMP/hobbit_zonestat.$ZONE.send $BB $BBDISP "data $ZONE.zonestat `$CAT $BBTMP/hobbit_zonestat.$ZONE.send` " /bin/rm -f $BBTMP/hobbit_zonestat.$ZONE.send COLOR=green if [ `egrep -c running $BBTMP/hobbit_zonestatus.$ZONE.send` -eq 1 ] ; then COLOR="green" elif [ `egrep -c installed $BBTMP/hobbit_zonestatus.$ZONE.send` -eq 1 ] ; then COLOR="red" else COLOR="yellow" fi $BB $BBDISP "status $ZONE.zone $COLOR `$DATE` `$CAT $BBTMP/hobbit_zonestatus.$ZONE.send` " /bin/rm -f $BBTMP/hobbit_zonestatus.$ZONE.send echo "client $ZONE.$BBOSTYPE $CONFIGCLASS" >> $BBTMP/hobbit_zonestatus.$ZONE.send echo "[date]" >> $BBTMP/hobbit_zonestatus.$ZONE.send /usr/local/bin/sudo /usr/sbin/zlogin ${ZONE} /bin/date >> $BBTMP/hobbit_zonestatus.$ZONE.send echo "[uname]" >> $BBTMP/hobbit_zonestatus.$ZONE.send /usr/local/bin/sudo /usr/sbin/zlogin ${ZONE} /bin/uname -a >> $BBTMP/hobbit_zonestatus.$ZONE.send echo "[uptime]" >> $BBTMP/hobbit_zonestatus.$ZONE.send /usr/local/bin/sudo /usr/sbin/zlogin ${ZONE} /bin/uptime >> $BBTMP/hobbit_zonestatus.$ZONE.send echo "[who]" >> $BBTMP/hobbit_zonestatus.$ZONE.send /usr/local/bin/sudo /usr/sbin/zlogin ${ZONE} /bin/who >> $BBTMP/hobbit_zonestatus.$ZONE.send echo "[df]" >> $BBTMP/hobbit_zonestatus.$ZONE.send # All of this because Solaris df cannot show multiple fs-types, or exclude certain fs types. FSTYPES=`/usr/local/bin/sudo /usr/sbin/zlogin ${ZONE} /bin/df -n -l|awk '{print $3}'|egrep -v "^proc|^fd|^mntfs|^ctfs|^devfs|^objfs|^nfs|"|sort|uniq` if test "$FSTYPES" = ""; then FSTYPES="lofs"; fi set $FSTYPES /usr/local/bin/sudo /usr/sbin/zlogin ${ZONE} /bin/df -F $1 -k | grep -v " /var/run" >> $BBTMP/hobbit_zonestatus.$ZONE.send shift while test "$1" != ""; do /usr/local/bin/sudo /usr/sbin/zlogin ${ZONE} /bin/df -F $1 -k | grep -v " /var/run" | tail +2 >> $BBTMP/hobbit_zonestatus.$ZONE.send shift done echo "[mount]" >> $BBTMP/hobbit_zonestatus.$ZONE.send /usr/local/bin/sudo /usr/sbin/zlogin ${ZONE} /sbin/mount >> $BBTMP/hobbit_zonestatus.$ZONE.send echo "[ifconfig]" >> $BBTMP/hobbit_zonestatus.$ZONE.send /usr/local/bin/sudo /usr/sbin/zlogin ${ZONE} /sbin/ifconfig -a >> $BBTMP/hobbit_zonestatus.$ZONE.send echo "[route]" >> $BBTMP/hobbit_zonestatus.$ZONE.send /usr/local/bin/sudo /usr/sbin/zlogin ${ZONE} netstat -rn >> $BBTMP/hobbit_zonestatus.$ZONE.send echo "[ports]" >> $BBTMP/hobbit_zonestatus.$ZONE.send /usr/local/bin/sudo /usr/sbin/zlogin ${ZONE} netstat -na -f inet -P tcp | tail +3 >> $BBTMP/hobbit_zonestatus.$ZONE.send /usr/local/bin/sudo /usr/sbin/zlogin ${ZONE} netstat -na -f inet6 -P tcp | tail +5 >> $BBTMP/hobbit_zonestatus.$ZONE.send echo "[ps]" >> $BBTMP/hobbit_zonestatus.$ZONE.send /bin/ps -o pid,ppid,user,stime,s,pri,pcpu,time,pmem,rss,vsz,args -z $ZONE >> $BBTMP/hobbit_zonestatus.$ZONE.send echo "[top]" >> $BBTMP/hobbit_zonestatus.$ZONE.send /usr/local/bin/sudo /usr/sbin/zlogin ${ZONE} $TOP -b 20 >> $BBTMP/hobbit_zonestatus.$ZONE.send $BB $BBDISP "@" < $BBTMP/hobbit_zonestatus.$ZONE.send >$LOGFETCHCFG.$ZONE.tmp done /bin/rm -f $BBTMP/hobbit_zonestat.$MACHINEDOTS.send /bin/rm -f $BBTMP/hobbit_zonestat.$MACHINEDOTS.work /bin/rm $BBTMP/hobbit_zonestat.$MACHINEDOTS fi exit 0
Show Code ⇲
Hide Code ⇱
#!/usr/local/bin/perl use strict; # Input parameters: Hostname, testname (column), and messagefile my $hostname=$ARGV[0]; my $testname=$ARGV[1]; my $fname=$ARGV[2]; my ( $line,@line); my ( @loop,$key,%buffer,$tmp ); open(IN,"$fname"); while(chomp($line=<IN>)) { @line=split(':',$line); $line[1] = join(' ',split(' ',$line[1])); $buffer{$line[0]}=$line[1]; } close(IN); if ( $testname eq "mpstat" ) { ## ## Reads in the mpstat.sh from client ## if ( defined($buffer{"CPUs"}) ) { @loop=split(' ',$buffer{"CPUs"}); print "DS:CPU:GAUGE:600:0:32\n"; print "DS:usr:GAUGE:600:0:100\n"; print "DS:sys:GAUGE:600:0:100\n"; print "DS:wt:GAUGE:600:0:100\n"; print "DS:idl:GAUGE:600:0:100\n"; foreach $key ( @loop ) { undef(@line); push(@line,$buffer{"${key}"}); push(@line,$buffer{"CPU${key}usr"}); push(@line,$buffer{"CPU${key}sys"}); push(@line,$buffer{"CPU${key}wt"}); push(@line,$buffer{"CPU${key}idl"}); print "mpstat.CPU${key}.rrd\n"; $line=join(':',@line); print "$line\n"; } } } elsif ( $testname eq "zonestat" ) { ## ## Reads in the zonestat.sh from client ## if ( defined($buffer{"ZONEs"}) ) { @loop=split(' ',$buffer{"ZONEs"}); print "DS:nproc:GAUGE:600:0:U\n"; print "DS:size:GAUGE:600:0:U\n"; print "DS:rss:GAUGE:600:0:U\n"; print "DS:memory:GAUGE:600:0:U\n"; print "DS:cpu:GAUGE:600:0:U\n"; foreach $key ( @loop ) { undef(@line); push(@line,$buffer{"${key}nproc"}); push(@line,$buffer{"${key}size"}); push(@line,$buffer{"${key}rss"}); push(@line,$buffer{"${key}memory"}); push(@line,$buffer{"${key}cpu"}); $tmp = (split('/',$key))[1]; print "zonestat.${key}.rrd\n"; $line=join(':',@line); print "$line\n"; } } } exit 0;