Hoy vamos a ver un pequeño script que puede ser muy útil para la monitorizacion.
Vamos a llamar a adrci indicándole que nos muestre los errores del alert desde la última vez que se ejecuto.
Para ello vamos a usar el comando show alert -p , marcándole como rango temporal a buscar la diferencia entre esta ejecución y a anterior.
#!/bin/bash
#
# Script que monitoriza el alert.log de una instancia desde la ultima vez que se ejecutó
# Si esta ultima ejecucion es menor de 5 minutos ejecuta los ultimos 5 minutos
#
#
# Si no guarda diene la guarda de ultima ejecucion sale con un ERROR
#
# Asuminos timestamp'2015-02-18 00:07:49.767000 +01:00'
#
# Salida de debug
DEBUG=0
#Comprobamos que se ha llamado de manera correcta
if [ $# -ne 1 ]; then
echo "Uso adrci_alert SID"
exit 3;
fi
# Inicializamos valores para el script
export ORAENV_ASK=NO
export TEMPORAL=/var/tmp/temporal_salida_alert_$$.log
export SALIDA=/var/tmp/salida_salida_alert_$$.log
export SID=$1
export GUARDA=/var/tmp/guarda_alert_${SID}.txt
DIA=`date +%Y-%m-%d`
HORA=`date +%H:%M:%S`
export AHORA="${DIA} ${HORA}.0000000 +01:00"
. oraenv 1>/dev/null
## Comenzamos la ejecucion
if [ $DEBUG -eq 1 ]; then
echo "DEBUG: ORACLE_BASE=$ORACLE_BASE"
echo "DEBUG: GUARDA= ${GUARDA}"
echo "DEBUG: SALIDA= ${SALIDA} "
echo "DEBUG: ORACLE_SID=$SID"
echo "DEBUG: AHORA=$AHORA"
fi
# Buscamos ultima iteracion
if [ ! -f $GUARDA ]; then
echo "No tenemos ejecucion anterior"
echo $AHORA > ${GUARDA}
exit 1;
fi
# Obtenemos el timestamp de la ultima ejecucion
TIEMPO=`cat ${GUARDA}`
# COmprobamos que han pasado mas de 5 minutos
OLD=`cat ${GUARDA}|awk '{print($1,$2)}'`
NOW="${DIA} ${HORA}.0000000"
SEGOLD=$(date -u -d "$OLD" +"%s")
SEGNOW=$(date -u -d "$NOW" +"%s")
DIFERENCIA=$((SEGNOW-SEGOLD))
# Comenzamos las iteraciones
adrci_homes=( $(adrci exec="show homes" | grep -e rdbms |grep ${SID}))
for adrci_home in ${adrci_homes[@]}
do
#Generamos el fichero de comandos
echo "SET TERMOUT OFF" > ${TEMPORAL}
echo "SET ECHO OFF" >> ${TEMPORAL}
echo "set home ${adrci_home} ;" >> ${TEMPORAL}
echo "spool ${SALIDA} append " >>${TEMPORAL}
echo "show alert -p \"message_text like '%ORA-%' and originating_timestamp >= \'${TIEMPO}\' \" -term " >>${TEMPORAL}
echo "exit; " >> ${TEMPORAL}
if [ $DEBUG -eq 1 ]; then
echo "DEBUG: "
echo "DEBUG: adrci SCRIPT=${TEMPORAL}"
echo "DEBUG: EL etemporal es "
echo "DEBUG: -inicio temporal-"
cat ${TEMPORAL}
echo "DEBUG: -fin temporal-"
fi
adrci SCRIPT=${TEMPORAL} 1>/dev/null
tail -n+4 ${SALIDA}
rm ${TEMPORAL}
done
#Actualizamos la guarda solamente si hace menos de 5 minutos que lo hemos ejecutado
if [ "$DIFERENCIA" -gt 299 ]; then
echo $AHORA > ${GUARDA}
fi
## Añadir aqui la integración con monitorizacion
##Borramos la salida
rm ${SALIDA}
#Salimos correctamente
exit 0 ;
A partir de aqui, solamente tenemos que integrar el tratamiento del fichero $SALIDA que es donde tendremos los errores del alert

