如何快速完成对批量URL的监控

2017-07-26  本文已影响37人  夜境

本文章转载于搜狗测试

需求场景

很多项目中都会有存在大量的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部门咨询);

脚本仅仅带状态码进行了验证,需要确认仅仅这些是否满足需求;

脚本并不完善,属于快速解决问题类型。


上一篇下一篇

猜你喜欢

热点阅读