Encontre 350ms em logs traceroute?

0

Então eu tenho um script bash que cria logs como este:

traceroute to -------, 30 hops max, 60 byte packets
1  router.Belkin (192.168.2.1)  2.275 ms  2.263 ms  2.249 ms
2  -------  16.961 ms  21.060 ms  21.069 ms
3  -------  21.025 ms  21.009 ms  20.996 ms

Eu gostaria de filtrar a parte ms e ver se alguma delas está acima de 350ms. Se houver, todo o arquivo de log será enviado para o meu e-mail com assunto "..." e corpo "..." qualquer ajuda?
Obrigada!

    
por QuyNguyen2013 29.07.2014 / 00:06

1 resposta

1

Aqui está um script. Forneça o nome do arquivo de log como o primeiro argumento. Isso verifica a qualquer momento mais de 350ms. Se esse tempo for encontrado, ele enviará um e-mail.

#!/bin/sh
logfile="$1"
flag="$(awk -v RS=" " '$1 == "ms" && last > 350 {flag=1} {last=$1} END{print flag}' "$logfile")"
[ "$flag" ] && mail you@host -s "Over 350ms Report for $logfile" <"$logfile"

Isso requer que o seu sistema tenha o correio corretamente instalado e configurado.

Script combinado

Os itens acima podem ser combinados com o script em O script não será reproduzido arquivos como planejados da seguinte forma:

#!/bin/sh
n=
while true
do
    fname=~/"Scripts/logs/trace$n.log"
    [ -f "$fname" ] || break
    n=$(($n+1))
done
traceroute google.com >"$fname"
flag="$(awk -v RS=" " '$1 == "ms" && last > 350 {flag=1} {last=$1} END{print flag}' "$fname")"
[ "$flag" ] && mail you@host -s "Over 350ms Report for $fname" <"$fname"

Forma Cooperativa

Suponha que o script em Script não percorra arquivos como planejado está sendo executado separadamente. Em seguida, um possível script para inspecionar os arquivos criados por ele para atrasos de > 350 ms seria:

#!/bin/sh
for logfile in ~/Scripts/logs/trace*.log
do
    flag="$(awk -v RS=" " '$1 == "ms" && last > 350 {flag=1} {last=$1} END{print flag}' "$logfile")"
    [ "$flag" ] && mail you@host -s "Over 350ms Report for $logfile" <"$logfile"
done

Forma cooperativa com mover e excluir

#!/bin/sh
otherdir=~/"Scripts/logs-with-long-delays/"
for logfile in ~/Scripts/logs/trace*.log
do
    flag="$(awk -v RS=" " '$1 == "ms" && last > 350 {flag=1} {last=$1} END{print flag}' "$logfile")"
    if [ "$flag" ]
    then
        mail you@host -s "Over 350ms Report for $logfile" <"$logfile"
        mv "$logfile" "$otherdir"
    else
        rm "$logfile"
    fi
done
    
por 29.07.2014 / 01:51