很多小伙伴都有自己的博客,或者做过Web,但是自己关心的Web是否健康?当前状态是否可访问?网站挂了谁的锅?这些问题都可以用相关的网站监控脚本进行监测。今天本文将分享如何通过腾讯云云函数开发一个简单的脚本,进行网站监控。
基本监控脚本
假如说,目前想要监控的网站是https://www.anycodes.cn,想知道这个网站是否可用,那么可以通过Python语言编写一个脚本,来查看这个网站的状态,获取他的http_status_code,如果该数值为200,则说明网站可用,如果非200,则说明网站不可用。
首先,打开腾讯云登陆并选择云函数业务,创建监控脚本:
写代码:
测试结果:
可以看到,网站是通的,在控制台输出相对应的结果。但如果网站返回的不是200,应该怎么办呢?可以通过短信或者邮件进行告警,以邮件告警方法为例,再写一个发送邮件的方法并整合进去:
点击测试查看结果:
此时,手机上面接收到了提醒:
为我们是要监控网站不可访问的状态,所以修改一下判断:
修改完成之后,就可以保存了。考虑到这个脚本需要每隔一段时间都要触发一次,因此可以设置一个定时触发。
触发方式里面增加定时触发,并且保存即可,同时点击右上角的发布新版本:
这时,网站状态监控就已经上线了!
升级监控脚本
有人说了,这样简单的一个脚本,意义大么?个人感觉意义很大,因为这个脚本,只是抛砖引玉,还有Plus版本:单纯根据状态判断靠谱么?我不要做一个访问时间统计?那么,就可以融合一个爬虫进入:
以网站测速网站:http://tool.chinaz.com/speedtest/anycodes.cn为例,可以看到:
是不是可以获得每个请求查看耗时呢?
通过网页分析,获得了每个测试点的id对应关系:
然后,可以根据这些关系,在本地测试:
以“62a55a0e-387e-4d87-bf69-5e0c9dd6b983 江苏宿迁[电信]“为例,编写代码:
({state:1,msg:'',result:{ip:'119.28.190.46',httpstate:200,alltime:'212',dnstime:'18',conntime:'116',downtime:'78',filesize:'-',downspeed:'4.72',ipaddress:'新加坡新加坡',headers:'\u0048\u0054\u0054\u0050\u002f\u0031\u002e\u0031\u0020\u0032\u0030\u0030\u0020\u004f\u004b \u0062\u0072\u003e\u0053\u0065\u0072\u0076\u0065\u0072\u003a\u0020\u006e\u0067\u0069\u006e\u0078\u002f\u0031\u002e\u0031\u0030\u002e\u0033\u0020\u0028\u0055\u0062\u0075\u006e\u0074\u0075\u0029 \u0062\u0072\u003e\u0044\u0061\u0074\u0065\u003a\u0020\u0053\u0075\u006e\u002c\u0020\u0032\u0038\u0020\u0041\u0070\u0072\u0020\u0032\u0030\u0031\u0039\u0020\u0030\u0033\u003a\u0032\u0031\u003a\u0033\u0030\u0020\u0047\u004d\u0054 \u0062\u0072\u003e\u0043\u006f\u006e\u0074\u0065\u006e\u0074\u002d\u0054\u0079\u0070\u0065\u003a\u0020\u0074\u0065\u0078\u0074\u002f\u0068\u0074\u006d\u006c \u0062\u0072\u003e\u004c\u0061\u0073\u0074\u002d\u004d\u006f\u0064\u0069\u0066\u0069\u0065\u0064\u003a\u0020\u0054\u0068\u0075\u002c\u0020\u0032\u0035\u0020\u0041\u0070\u0072\u0020\u0032\u0030\u0031\u0039\u0020\u0030\u0037\u003a\u0033\u0033\u003a\u0035\u0035\u0020\u0047\u004d\u0054 \u0062\u0072\u003e\u0054\u0072\u0061\u006e\u0073\u0066\u0065\u0072\u002d\u0045\u006e\u0063\u006f\u0064\u0069\u006e\u0067\u003a\u0020\u0063\u0068\u0075\u006e\u006b\u0065\u0064 \u0062\u0072\u003e\u0043\u006f\u006e\u006e\u0065\u0063\u0074\u0069\u006f\u006e\u003a\u0020\u0063\u006c\u006f\u0073\u0065 \u0062\u0072\u003e\u0045\u0054\u0061\u0067\u003a\u0020\u0057\u002f\u0022\u0035\u0063\u0063\u0031\u0036\u0032\u0065\u0033\u002d\u0038\u0038\u0061\u0022 \u0062\u0072\u003e\u0043\u006f\u006e\u0074\u0065\u006e\u0074\u002d\u0045\u006e\u0063\u006f\u0064\u0069\u006e\u0067\u003a\u0020\u0067\u007a\u0069\u0070 \u0062\u0072\u003e \u0062\u0072\u003e',pagehtml:''}})
拿到结果之后,就可以知道江苏宿迁[电信]访问anycodes的:
- 总耗时:alltime:'212'
- 链接耗时:conntime:'116'
- 下载耗时:downtime:'78'
整合程序,对每个请求进行处理:
运行结果:
将该部分内容融合之前的脚本中:
由于这个程序,可能运行的时间有点长,所以需要对云函数的timeout进行修改:
修改之后,可以测试和部署一下:
然后,可以部署到线上。
当然,这里可能还有一些小问题,那就是,很可能某些测试节点出问题,导致网站无法访问,所以这个告警机制可以重新编排一下:
当n个节点出现问题,再进行告警:
灵感启发:PPPlus版本
可能有时候不是监控自己的网站,而是要监控别人网站的某些行为,例如某个小说是否更新了,某个视频是否更新了,某个产品是否发布了,某个成绩是否出来... 其实这些情景都可以用腾讯云的函数计算来开发,非常的简单方便。