script de shell para monitorear los errores actuales en el archivo de registro

script de shell para monitorear los errores actuales en el archivo de registro

Este script monitorea el archivo de registro en busca del patrón "ora", extrae los detalles del error y envía un correo electrónico. En este caso, quiero extraer solo el último error que viene en el archivo de registro. Configuré crontab cada 5 minutos, por lo que grep elimina los mismos errores antiguos que causan alertas falsas. El script debería recibir errores con la hora actual y debería evitar buscar el error anterior.

mailto=xyz.email.com
logdirectory=/location/to/logfile
cd $logdirectory
grep "ORA" logfile
if [ $? = 0 ]; then
mailx -s "errors" $mailto
fi

Mi archivo de registro:

Fri Jun 07 05:09:32 2019 Archived Log entry 93 added for thread 1 sequence 59 ID 0xf10d426f dest 1: 
Fri Jun 07 11:08:20 2019 07-JUN-19 ORA-1100: Testing, Please Ignore

Respuesta1

Mostrando la opción 2 demi comentariocomosolicitado por OP:

awk -v parseLog='/some/where/filename' '
    BEGIN {
        prevNR=( (getline line < parseLog) > 0 ? line : 0 )
    }
    (NR>prevNR) && /ORA/{ print; found=1 }
    END {
        print NR > parseLog
        exit !found
    }
' /location/to/logfile

o con cáscara:

parseLog='/some/where/filename'
IFS= read -r line < "$parseLog"
if [[ -n "$line" ]]; then
    prevNR="$line"
else
    prevNR=0
fi
nr=$(wc -l < /tmp/logfile)
head -"$nr" /location/to/logfile |
    tail +"$(( "$prevNR" + 1 ))" |
    grep ORS
rslt=$?
printf '%d\n' "$nr" > "$parseLog"

Tenga en cuenta que primero debe obtener el número de líneas wc, haga un headpara ese número de líneas y canalice ESO a la cola y luego a grep, de lo contrario, el archivo de registro podría crecer entre grepy wcluego se perdería una línea en la siguiente iteración o si intercambió el orden de ellos, entonces podría analizar la misma línea dos veces.

Tenga en cuenta que lo anterior supone que todo lo que se escribe en el archivo de registro lo hace en 1 operación atómica por línea; si escribe partes de líneas por separado y luego adjunta una nueva línea cuando termina, entonces debe ignorar la última línea, posiblemente parcial, del archivo de registro para el análisis anterior.

información relacionada