在 traceroute 日志中找到 350ms?

在 traceroute 日志中找到 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

我想过滤掉毫秒部分,看看是否有超过 350 毫秒的部分。如果有,整个日志文件将发送到我的电子邮件中,主题为“...”,正文为“...”,有什么帮助吗?
谢谢!

答案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

相关内容