shell script para monitorar erros atuais no arquivo de log

shell script para monitorar erros atuais no arquivo de log

Este script monitora o arquivo de log para o padrão "ora", extrai detalhes do erro e envia email. Nesse caso, quero extrair apenas o último erro que vem no arquivo de log. Eu configurei o crontab para cada 5 minutos, então o grep retira os mesmos erros antigos que causam alertas falsos. O script deve receber erros com a hora atual e evitar procurar o erro antigo.

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

Meu arquivo de log:

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

Responder1

Mostrando a opção 2 demeu comentáriocomosolicitado pelo 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

ou em casca:

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"

Observe que você precisa obter o número de linhas wcprimeiro, faça um headpara esse número de linhas e canalize ISSO para o final e depois para o grep, caso contrário o arquivo de log poderá crescer entre o grepe o wce então você perderá uma linha no seu próximo iteração ou se você trocou a ordem deles, poderá analisar a mesma linha duas vezes.

Observe que o acima assume que tudo o que está sendo gravado no arquivo de log o faz em 1 operação atômica por linha - se estiver escrevendo partes de linhas separadamente e, em seguida, anexando uma nova linha quando terminar, você precisará ignorar a última linha, possivelmente parcial, do log para a análise acima.

informação relacionada