Table of Contents

ldom.ksh

Author Vernon Everett
Compatibility Xymon but might work elsewhere - it's simple enough
Requirements Oracle/Fujitsu T-series or M-Series hardware running LDoms
Download None
Last Update 2015-01-19

Description

This script was born from a need to give people visibility of the LDoms and available resources, but without giving them access to the control domain to gather this information.

Xymon, being available, seemed the most logical place to display the information for those who needed it.

Added CPU usage graphing to assist with capacity planning. Calculates and graphs an “Effective Number of VCPUs Utilised”.

Recently added a feature to alert if the SP-Config was not up to date. For those who don't know, this is the virtualisation config, which needs to be updated after changes. Forget and reboot, and it loads the previous config, potentially with disasterous results. It's nice to be reminded to update it if required.

Installation

Client side

Copy ldom.ksh in hobboit/xymon ext directory (usually in HOBBITCLIENTHOME/ext) on the control domain.

Give it appropriate sudo, SUID or RBA access to allow the hobbit/xymon user to run ldm

Add the following to clientlaunch.cfg

[ldom]
      ENVFILE $HOBBITCLIENTHOME/etc/hobbitclient.cfg
      CMD $HOBBITCLIENTHOME/ext/ldom.ksh
      LOGFILE $HOBBITCLIENTHOME/logs/ldom.log
      INTERVAL 5m

Server side

Add the following to graphs.cfg

[ldom]
    FNPATTERN ldom,(.*).rrd
    TITLE LDOM EFFECTIVE VCPU UTILISATION
    YAXIS Effective CPUs
    -l 0
    DEF:p@RRDIDX@=@RRDFN@:lambda:AVERAGE
    LINE2:p@RRDIDX@#@COLOR@:@RRDPARAM@
    GPRINT:p@RRDIDX@:LAST: \: %5.2lf (cur)
    GPRINT:p@RRDIDX@:MAX: \: %5.2lf (max)
    GPRINT:p@RRDIDX@:MIN: \: %5.2lf (min)
    GPRINT:p@RRDIDX@:AVERAGE: \: %5.2lf (avg)\n
    

Add the following to xymonserver.cfg

SPLITNCV_ldom="*:GAUGE"

Source

ldom.ksh

Show Code ⇲

Hide Code ⇱

#!/bin/ksh
[ -x /usr/sbin/ldm ] || exit 0      # I am not a control LDom. Exit quietly
typeset -R7 CPU_NOT
typeset -R7 MEM_NOT
typeset -R7 CPU_TOT
typeset -R7 MEM_TOT
TEMPFILE=$XYMONTMP/ldom
COLOUR=green
# Get unallocated CPUs
CPU_NOT=$(/usr/sbin/ldm list-devices cpu | egrep -v "^$|VCPU|FREE" | wc  -l | sed 's/ //g')
# Get unallocated memory
MEM_NOT=0
ldm list-devices mem | awk '{ print $2 }' | egrep -v "^$|SIZE" | while read a
do
   echo $a | egrep -s "G"
   if [ $? -eq "0" ]
   then
      MULTIPLIER=1024
   else
      MULTIPLIER=1
   fi
   MEM=$(echo $a | sed 's/G//g;s/M//g')
   ((MEM_NOT=MEM_NOT+MEM*MULTIPLIER))
done
# Get allocated CPUs
CPU_TOT=0
date > $TEMPFILE
/usr/sbin/ldm ls > $TEMPFILE.2
cat $TEMPFILE.2 >> $TEMPFILE
cat $TEMPFILE.2 | egrep -v "inactive|bound" | awk '{ print $5 }' | grep -v CPU | while read a
do
   ((CPU_TOT=CPU_TOT+a))
done
# Get allocated memory
MEM_TOT=0
cat $TEMPFILE.2 | egrep -v "inactive|bound" | awk '{ print $6 }' | grep -v MEMORY | while read a
do
   echo $a | egrep -s "G"
   if [ $? -eq "0" ]
   then
      MULTIPLIER=1024
   else
      MULTIPLIER=1
   fi
   MEM=$(echo $a | sed 's/G//g;s/M//g')
   ((MEM_TOT=MEM_TOT+MEM*MULTIPLIER))
done
echo '-----------------------------------------------------------------------------' >> $TEMPFILE
echo "Total Allocated                        $CPU_TOT ${MEM_TOT}M" >> $TEMPFILE
echo "Total Available                        $CPU_NOT ${MEM_NOT}M" >> $TEMPFILE
# And a quick check to make sure the spconfig is up to date.
LATEST_CONFIG=$(ldm list-spconfig | grep "\[current\]")
echo >> $TEMPFILE
if [ -z "$LATEST_CONFIG" ]
then
   COLOUR=yellow
   LATEST_CONFIG=$(ldm list-spconfig | grep "\[next poweron\]")
   echo "&yellow Latest SP-Config not up to date - $LATEST_CONFIG" >> $TEMPFILE
   echo 'Use "ldm add-spconfig $(date +%Y%m%d-%H%M)" to update the SP-Config' >> $TEMPFILE
else
   echo "&green SP-Config up to date - $LATEST_CONFIG" >> $TEMPFILE
fi
# Now get graphing data
> $TEMPFILE.3
cat $TEMPFILE.2 | sed "s/%//g" \
                | grep -v "^NAME" \
                | awk '{ print $1" "$5" "$7 }' \
                | while read NAME CPU UTIL
                  do
                     #echo $1" "$5" "$7
                     ECPU=$(echo "scale=2;${CPU}*${UTIL}/100" | bc 2>/dev/null)
                     #echo $ECPU
                     echo "$NAME : $ECPU" >> $TEMPFILE.3
                  done
echo >> $TEMPFILE.3
$XYMON $XYMSRV "status $MACHINE.ldom $COLOUR $(cat $TEMPFILE)"
$XYMON $XYMSRV "data $MACHINE.ldom $COLOUR $(echo;echo;cat $TEMPFILE.3;echo "";echo "ignore this")"

Known Bugs and Issues

Let me know if you spot any.

To Do

Solve world hunger.

Credits

I acted alone, I swear it!

Changelog