350 ms in Traceroute-Protokollen finden?

350 ms in Traceroute-Protokollen finden?

Ich habe also ein Bash-Skript, das Protokolle wie dieses erstellt:

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

Ich möchte den ms-Teil herausfiltern und sehen, ob einer davon über 350 ms liegt. Wenn das der Fall ist, wird die gesamte Protokolldatei mit dem Betreff „…“ und dem Text „…“ an meine E-Mail gesendet. Irgendwelche Hilfe?
Danke!

Antwort1

Hier ist ein Skript. Geben Sie den Namen der Protokolldatei als erstes Argument an. Dadurch wird geprüft, ob eine Zeit über 350 ms liegt. Wenn eine solche Zeit gefunden wird, wird eine E-Mail gesendet.

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

Dies erfordert, dass E-Mail auf Ihrem System ordnungsgemäß installiert und konfiguriert ist.

Kombiniertes Skript

Das oben genannte kann mit dem Skript in kombiniert werdenDas Skript durchläuft die Dateien nicht wie geplantwie folgt:

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

Genossenschaftsform

Angenommen, das Skript inDas Skript durchläuft die Dateien nicht wie geplantseparat ausgeführt wird. Ein mögliches Skript zum Überprüfen der von ihm erstellten Dateien auf Verzögerungen >350 ms wäre dann:

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

Kooperatives Formular mit Verschieben und Löschen

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

verwandte Informationen