Differences

This shows you the differences between two versions of the page.

Link to this comparison view

monitors:zonestat [2011/09/01 14:40] (current)
Line 1: Line 1:
 +====== zonestat ======
 +
 +^ Author | [[ etmsys@rit.edu | Eric Meddaugh ]] |
 +^ Compatibility | Xymon 4.2 |
 +^ Requirements | Solaris 10 |
 +^ Download | None |
 +^ Last Update | 2009-10-26 |
 +
 +===== Description =====
 +
 +Monitor zones status under Solaris 10.
 +
 +===== Installation =====
 +==== Client Configuration ====
 +  - Add script to client'​s ext folder
 +  - Add the following to client hobbitlaunch.cfg <​code>​
 +[zonestat]
 + ENVFILE $HOBBITCLIENTHOME/​etc/​hobbitclient.cfg
 + CMD $HOBBITCLIENTHOME/​ext/​zonestat.sh ​
 + LOGFILE $HOBBITCLIENTHOME/​logs/​zonestat.log
 + INTERVAL 5m
 +</​code>​
 +
 +==== Server Configuration ====
 +
 +  * Xymon only supports 1 data reader on the server. ​ To make it as configurable as possible (we use multiple items to send stats to).  Perl was used to help make it quicker. Inside the script has the graph definitions as well.  You will have to add the information as documented below to the [rrddata] section to the hobbitlaunch.cfg file.  Modify the hobbitlaunch.cfg file on the server under the rrddata section (add the --extra-tests and --extra-script segments): <​code>​
 +# "​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
 +</​code>​
 +<​note>​Step 1 is not needed if you have the mpstat monitor installed.</​note>​
 +  * Add '​zonestat:​zonestatcpu|zonestatmem|zonestatnproc|zonestatsize|zonersssize'​ to the bb-hosts entry.<​code>​
 +0.0.0.0 ​  ​myserver ​   # "​TRENDS:​*,​zonestat:​zonestatcpu|zonestatmem|zonestatnproc|zonestatsize|zonersssize"​
 +</​code>​
 +  * Update hobbitgraph.cfg with: \\ 
 +<hidden onHidden="​Show Code ⇲" onVisible="​Hide Code ⇱">​
 +<​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
 +
 +</​code>​
 +</​hidden>​
 +  * Add '​zonestat'​ to the GRAPHS and TEST2RRD entry in hobbitserver.cfg.
 +
 +===== Source =====
 +
 +==== zonestat.sh ====
 +<hidden onHidden="​Show Code ⇲" onVisible="​Hide Code ⇱">​
 +<​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
 +</​code>​
 +</​hidden>​
 +
 +==== zonestat.sh ====
 +<hidden onHidden="​Show Code ⇲" onVisible="​Hide Code ⇱">​
 +<​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
 +</​code>​
 +</​hidden>​
 +
 +==== rrd_data.pl ====
 +<hidden onHidden="​Show Code ⇲" onVisible="​Hide Code ⇱">​
 +<​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;
 +</​code>​
 +</​hidden>​
 +
 +===== Known  Bugs and Issues =====
 +
 +  * No known bugs
 +
 +===== To Do =====
 +
 +===== Credits =====
 +
 +===== Changelog =====
 +
 +  * **2006-11-26**
 +    * Initial release
  
  • monitors/zonestat.txt
  • Last modified: 2011/09/01 14:40
  • (external edit)