トレースルートのログで 350ms を見つけますか?

トレースルートのログで 350ms を見つけますか?

そこで、次のようなログを作成する bash スクリプトがあります。

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

ms 部分をフィルターして、350 ms を超えるものがあるかどうかを確認したいと思います。 350 ms を超えるものがあれば、ログ ファイル全体が件名「...」、本文「...」で私のメールに送信されます。 何か助けていただけますか?
ありがとうございます!

答え1

ここにスクリプトがあります。最初の引数としてログ ファイル名を指定します。これは 350 ミリ秒を超える時間をチェックします。そのような時間が見つかった場合は、電子メールを送信します。

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

これには、システムにメールが適切にインストールされ、設定されていることが必要です。

複合スクリプト

上記は、以下のスクリプトと組み合わせることができます。スクリプトは計画どおりにファイルをループしません次のように:

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

協力形態

スクリプトがスクリプトは計画どおりにファイルをループしません別々に実行されています。次に、350 ミリ秒を超える遅延で作成されたファイルを検査するスクリプトは次のようになります。

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

移動と削除を伴う協調フォーム

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

関連情報