#!/usr/bin/bash
#< Script to monitor iostat counters for a specific disk
CUT="/usr/bin/cut"
ECHO="/usr/bin/echo"
GREP="/bin/grep"
HOSTNAME="/bin/hostname"
IOSTAT="/usr/bin/iostat"
MV="/usr/bin/mv"
SED="/usr/bin/sed"
DISK="c1t0d0"
TMPROOT="/var/tmp"
TMPFILE="${TMPROOT}/iostat-${DISK}.current"
OLDFILE="${TMPROOT}/iostat-${DISK}.previous"
exec 3>&1
exec 1> ${TMPFILE}
${IOSTAT} -En ${DISK} | while read LINE; do
case "${LINE}" in
${DISK}* )
SOFT_ERRORS=$( ${ECHO} "${LINE}" | ${SED} 's/.*Soft Errors: \([0-9][0-9]*\) .*$/\1/' )
${ECHO} "SOFT_ERRORS:${SOFT_ERRORS}"
HARD_ERRORS=$( ${ECHO} "${LINE}" | ${SED} 's/.*Hard Errors: \([0-9][0-9]*\) .*$/\1/' )
${ECHO} "HARD_ERRORS:${HARD_ERRORS}"
TRAN_ERRORS=$( ${ECHO} "${LINE}" | ${SED} 's/.*Transport Errors: \([0-9][0-9]*\)$/\1/' )
${ECHO} "TRAN_ERRORS:${TRAN_ERRORS}"
;;
Media* )
MEDIA_ERRORS=$( ${ECHO} "${LINE}" | ${SED} 's/.*Media Error: \([0-9][0-9]*\).*$/\1/' )
${ECHO} "MEDIA_ERRORS:${MEDIA_ERRORS}"
DEV_NOT_READY=$( ${ECHO} "${LINE}" | ${SED} 's/.*Device Not Ready: \([0-9][0-9]*\).*$/\1/' )
${ECHO} "DEV_NOT_READY:${DEV_NOT_READY}"
NO_DEVICE=$( ${ECHO} "${LINE}" | ${SED} 's/.*No Device: \([0-9][0-9]*\).*$/\1/' )
${ECHO} "NO_DEVICE:${NO_DEVICE}"
RECOVERABLE=$( ${ECHO} "${LINE}" | ${SED} 's/.*Recoverable: \([0-9][0-9]*\)$/\1/' )
${ECHO} "RECOVERABLE:${RECOVERABLE}"
;;
Illegal* )
ILLEGAL_REQ=$( ${ECHO} "${LINE}" | ${SED} 's/.*Illegal Request: \([0-9][0-9]*\).*$/\1/' )
${ECHO} "ILLEGAL_REQ:${ILLEGAL_REQ}"
PRED_FAIL=$( ${ECHO} "${LINE}" | ${SED} 's/.*Failure Analysis: \([0-9][0-9]*\)$/\1/' )
${ECHO} "PRED_FAIL:${PRED_FAIL}"
;;
esac
done
exec 1>&3
if [ -e "${OLDFILE}" ]; then
while read LINE; do
TYPE=$( ${ECHO} "${LINE}" | ${CUT} -d: -f1 )
VALUE=$( ${ECHO} "${LINE}" | ${CUT} -d: -f2 )
OLDVALUE=$( ${GREP} "^${TYPE}:" ${OLDFILE} | ${CUT} -d: -f2 )
if [ "${VALUE}" -gt "${OLDVALUE}" ]; then
${ECHO} "WARNING: ${TYPE} has increased from ${OLDVALUE} to ${VALUE} on $( ${HOSTNAME} ):${DISK}"
fi
done < ${TMPFILE}
fi
${MV} ${TMPFILE} ${OLDFILE}
exit 0