如何排查网络偶尔不通的问题

71 阅读2分钟

问题:在上传文件到文件服务器的时候,偶尔出现上传失败的情况,因为不是现的,非常难排查。经查看日志确认是网络问题后,网络中心的同学说网络是通的,没问题。所以接下来的就是我们需要找出网络不通的证据。

怎么证明呢?(您可以思考5秒,看看是否和我说的思路一致)

就是在生产服务器执行一个脚本,不断的ping目标地址,运行一段时间来看看结果。实测下来确实出现网络不通的情况多达10几次,有时持续一两分钟都不行!

以下主要是和运维相关的脚本了,不感兴趣的可以结束了。

Linux里面ping是不间断的,其实我想每个1分钟请求一次,而不用那么频繁。而且有些服务器还禁止了ping。

所以改用curl,具体参数详细可以查看教程链接

为了方便做对比,所以写个小脚本比较方便,命名checkurl.sh,接收一个url参数;再写个runCheckUrl.sh,然后使用Linux定时任务去执行这个runCheckUrl.sh脚本。

checkurl.sh

#!/bin/bash
TIME=$(date +%Y%m-%d%H%M)
usage(){
    echo "Usage:$0 url"
    exit 1
}
​
checkurl(){
​
    local num=`curl -I -m 60 -w "http_code:%{http_code}| http_connect:%{http_connect}| time_namelookup:%{time_namelookup}| time_connect:%{time_connect}| time_pretransfer:%{time_pretransfer}| time_starttransfer:%{time_starttransfer}| time_total:%{time_total}| size_download:%{size_download}| speed_download:%{speed_download}\n" -o /dev/null $1`
​
    #local num=`curl -s -S -m 60 $1`
​
    echo "时间:${TIME},$1 站点访问: ${num}" >>  /home/shell/logs/check.log
​
}
​
main(){
​
    if [ $# -ne 1 ]
    then
        usage
    fi
​
    checkurl $1
​
}
​
main $*

runCheckUrl.sh

#! /bin/sh
sh /home/shell/checkurl.sh https://www.baidu.com
sh /home/shell/checkurl.sh https://www.example.com

Linux定时任务

相关命令是crontab,不熟悉的小伙伴自行找资料

[xxx@ecs123 home]$ crontab -l */1 * * * * /data/shell/runCheckUrl.sh

后面就是时不时观察日志/home/shell/logs/check.log

运行几天后,就可以理直气壮的找网络中心的同学了!

彩蛋:后面是换了域名解决了,但是还是有出现网络不通的情况,一天就只有一两次,错误大大降低了。