¿Encontrar 350 ms en los registros de traceroute?

¿Encontrar 350 ms en los registros de traceroute?

Entonces tengo un script bash que crea registros 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

Me gustaría filtrar la parte ms y ver si alguna de ellas tiene más de 350 ms. Si es así, el archivo de registro completo se enviará a mi correo electrónico con el asunto "..." y el cuerpo "..." ¿Alguna ayuda?
¡Gracias!

Respuesta1

Aquí hay un guión. Proporcione el nombre del archivo de registro como primer argumento. Esto comprueba cualquier tiempo superior a 350 ms. Si se encuentra ese momento, envía un correo electrónico.

#!/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"

Esto requiere que su sistema tenga el correo instalado y configurado correctamente.

Guión combinado

Lo anterior se puede combinar con el script enEl script no recorrerá los archivos como estaba previstocomo sigue:

#!/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

Supongamos que el guión enEl script no recorrerá los archivos como estaba previstose ejecuta por separado. Entonces, un posible script para inspeccionar los archivos creados por él para retrasos de >350 ms sería:

#!/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

Formulario cooperativo con mover y eliminar

#!/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

información relacionada