本文章转载于搜狗测试
需求场景
很多项目中都会有存在大量的URL(包含头像、图片、页面链接等)的情况,这批URL有时候会是合作类的项目,为合作方提供,有时候如果更新不及时,会存在因合作方的服务不可用导致项目应用/服务不可用的问题,影响口碑。
那么,我们需要对这批URL进行监控,监控其是否可达。
方案分析
首先想到的是监控平台。将这些URL一个个添加到监控平台中进行监控即可。
但是,存在几个问题:
这批URL数量庞大,逐个添加到监控平台中,会耗费大量时间;
这批URL会随着不同的服务接入或配置文件版本而发生变化(增,删,改),后续监控平台的维护也是成本。
那么有每一种快速完成任务,且简易可行的方案呢?
分析这两个问题,我们其实可以通过脚本读取文件的方式来进行URL的批量访问。URL可以存放到文件中,然后通过for循环去逐个访问。根据返回的状态码,来判断服务是否可达。
然后,定时的去完成上面的任务,并将结果发送到邮箱中即可。
方案实现
选定了上面的方案(使用脚本实现),我们就需要分析一下实现上面的方案需要什么。
读取文件,循环访问URL,可以通过Linux Shell脚本完成(若干行代码);
定时执行,可以通过Linux 服务器的Crontab完成(1行代码);
邮件发送,可以使用Linux系统中的mail命令完成(代码≥1行)。
代码实现如下:
#!/bin/sh# FILENAME: start.sh
set-e
# fail_case.txt文件用来存放执行的结果日志
echo`date` > /root/Supervisory/fail_case.txt
# mail_content文件用来记录失败的URL,并作为邮件正文发出
echo-n > /root/Supervisory/mail_content
if[-e/root/Supervisory/urls.info ];then# 使用一个FOR循环逐个URL请求,如果返回的状态码为200,301,302则认为正确forurlin$(cat /root/Supervisory/urls.info)dost_code=$(curl -I -X"GET"--connect-timeout5-m10"$url"| head -n1| cut-d" "-f2)
if[${st_code}-ne200];thenif[${st_code}-ne302] && [${st_code}-ne301];thenobject="Fail"# 记录日志,以及邮件正文内容echo-e"[*]${st_code}Fail\t"$url>> /root/Supervisory/fail_case.txt
echo-e"[*]${st_code}Fail\t"$url>> /root/Supervisory/mail_content
elseecho-e"[ ]${st_code}Success\t"$url>> /root/Supervisory/fail_case.txt
fi
elseecho-e"[ ]${st_code}Success\t"$url>> /root/Supervisory/fail_case.txt
fidone
fi
# 如果存在失败的现象,则发送邮件,附件是日志文件
if["$object"=="Fail"];thenmail-s"Test Failed"-a/root/Supervisory/fail_case.txt xxxxxx@qq.com < /root/Supervisory/mail_contentfi
以上完成了分析中的1和3,使用代码行数24行(不含空行和注释)。耗时0.5h。
接下来完成Crontab的编写,完成定时发送。格式如下:
*/30* * * * /root/Supervisory/start.sh
以上配置完成了每30分钟的监控频率。配置代码行数1行,编写以及调试耗时5分钟。
到此为止,完成了对批量URL进行监控的需求。
注意事项
由于是第三方合作页面,因此要确认是否需要进行监控;
确认监控的频率,是否会带来合作上的影响;
邮件的接收人若是公司邮箱,有可能会被当做垃圾邮件(联系公司IT部门咨询);
脚本仅仅带状态码进行了验证,需要确认仅仅这些是否满足需求;
脚本并不完善,属于快速解决问题类型。
网友评论