[xymon] iostat monitor

Isaac W Traxler traxler at lsu.edu
Wed Sep 15 00:19:53 CEST 2010


Hi,

Jason and I have hacked at the iostat and got something that seems to work 
on Linux. We have not cleaned it up near enough or fixed all that we need. 
Along with changing the script, the graph definitions need to also be 
changed. Here is the what we have done with iostat so far:

#!/bin/bash
OS=$(uname -o)
PID=$$

if [[ ${OS} == "solaris" ]]
  then
     IOSTAT='/usr/bin/iostat -xrn'
  else
     IOSTAT='/usr/bin/iostat -x'
  fi

TEMPFILE=${BBTMP}/diskstat.tmp.${PID}
SHOW_NFS=no   # Set this to yes on server side clientlocal.cfg to change 
it
               # DISKSTAT:SHOW_NFS=yes
DURATION=270   # The duration of the iostat sample
               # This can be updated in the same way as above

# Now we redefine some variables, if they are set in clientlocal
LOGFETCH=${BBTMP}/logfetch.$(uname -n).cfg
if [ -f ${LOGFETCH} ]
     then
        grep "^DISKSTAT:" ${LOGFETCH} | cut -d":" -f2 \
                                      | while read NEW_DEF
                                      do
                                         ${NEW_DEF}
                                      done
fi

> ${TEMPFILE}  # Make sure it's empty
TEMPFILERAW="${TEMPFILE}.raw"
${IOSTAT} $DURATION 2  > ${TEMPFILERAW}  # And collect some data to work 
with.
# We have to collect 2 sets, because the first set is the average since 
boot.

# Define where the second set of data starts
LINE=$(cat ${TEMPFILERAW} | grep -n "^Device:" | tail -1 | cut -d":" -f1)
# take the second set, and massage it into usable data
TEMPFILEDATA="${TEMPFILE}.data"
if [[ ${OS} == "solaris" ]]
  then
     cat ${TEMPFILERAW} | awk "NR>${LINE}" \
                        | sed "s/,/ /g" \
                        | awk '{ print $NF" "$0 }' \
                        | awk '{ $NF="";print }' > ${TEMPFILEDATA}
  else
     cat ${TEMPFILERAW} | awk "NR>${LINE}" \
                        | awk '{ print $0" "$1 }' \
                        | awk '{ $NF="";print }' > ${TEMPFILEDATA}
   fi
rm ${TEMPFILERAW}
# Now we format the data and send it off to the server
if [[ ${OS} == "solaris" ]]
  then
     COLUMNS="reads writes kreads kwrites wait actv svct pw pb"
  else
     COLUMNS="rrqm wrqm r w rsec wsec avgrq-sz avgqu-sz await svctm util"
  fi
count=1
for subtest in ${COLUMNS}
do
    ((count=count+1))
    echo "" >> ${TEMPFILE}
    cat ${TEMPFILEDATA} | cut -d" " -f1,${count} \
                        | while read DEVICE VAL
                         do
                            echo "${DEVICE}" | grep ":/" > /dev/null
                            if [ $? -eq 0 -a "${SHOW_NFS}" = "no" ]
                            then
                               break
                            else
                               DEVICE=$(echo ${DEVICE} | tr : - )
                            fi
                            echo "${DEVICE}:${VAL}" >> ${TEMPFILE}
                         done
                         echo "" >> ${TEMPFILE}
                         ${BB} ${BBDISP} "data 
${MACHINE}.diskstat-${subtest} $(echo; cat ${TEMPFILE} ;echo "" ;echo 
"ignore this" )"
                         # Without the last echo "ignore this", it seems to 
not graph the last entry.
                         # Odd really, but that seems to fix it.
                         rm ${TEMPFILE}
done
rm ${TEMPFILEDATA}


--
Isaac Traxler                             AIX,Linux Admin
Louisiana State University                traxler at lsu.edu
High Performance Computing                225-578-1923
LONI AIX Clusters
AIX, Linux Support

On Tue, 14 Sep 2010, Daniel Bourque wrote:

> Date: Tue, 14 Sep 2010 16:22:13 -0500
> From: Daniel Bourque <dbourque at weatherdata.com>
> Reply-To: xymon at xymon.com
> To: xymon at xymon.com
> Subject: [xymon] iostat monitor
> 
> Sorry I can't reply to the thread for some reason i quit receiving the 
> emails, I checked the archive and noticed the replies to my former thread. ( 
> thanks ! )
>
> Vernon, since I don't run solaris here, only linux and some tru64, the -r ( 
> csv output ) and -n ( friendly names ) options makes it hard to use your 
> shell script since they either don't exists or don't work the same. Can you 
> perhaps provide a same output of  "iostat -xrn" and along with formated text 
> you pass to hobbit in your check.
>
> I can then provide a snippet of code for linux, which would provide the 
> equivalent output. So you could just add a case in the shell script.
>
>
> case `uname` in
>   Linux)
>     /usr/bin/iostat -x $DURATION 2 | wonderful stuff > $TEMPFILE.raw
>      ;;
>   SunOS)
>     /usr/bin/iostat -xrn $DURATION 2 > $TEMPFILE.raw
>     ;;
> esac
>
>
>
> -- 
> Dan
>
>
> To unsubscribe from the xymon list, send an e-mail to
> xymon-unsubscribe at xymon.com
>
>
>



More information about the Xymon mailing list