写点什么

Serverless 实践系列(四):网站监控脚本的实现

2019 年 8 月 16 日

Serverless实践系列(四):网站监控脚本的实现

很多开发者都有自己的博客,或者做过 Web,但是自己关心的 Web 是否健康?当前状态是否可访问?网站挂了谁的锅?这些问题都可以用相关的网站监控脚本进行监测。今天本文将分享如何通过云函数开发一个简单的脚本,进行网站监控。


基本监控脚本


假如说,目前想要监控的网站是https://www.anycodes.cn,想知道这个网站是否可用,那么可以通过 Python 语言编写一个脚本,来查看这个网站的状态,获取他的 http_status_code,如果该数值为 200,则说明网站可用,如果非 200,则说明网站不可用。


首先,打开腾讯云登陆并选择云函数业务,创建监控脚本:



写代码:


# -*- coding: utf8 -*-import jsonimport urllib.request
def getStatusCode(url): return urllib.request.urlopen(url).getcode()
def main_handler(event, context): if getStatusCode("https://www.anycodes.cn") == 200: print("网站可访问")
复制代码


测试结果:



可以看到,网站是通的,在控制台输出相对应的结果。但如果网站返回的不是 200,应该怎么办呢?可以通过短信或者邮件进行告警,以邮件告警方法为例,再写一个发送邮件的方法并整合进去:


# -*- coding: utf8 -*-import sslimport jsonimport smtplibimport urllib.requestfrom email.mime.text import MIMETextfrom email.header import Header
ssl._create_default_https_context = ssl._create_unverified_context
def sendEmail(content, to_user): sender = 'service@anycodes.cn' receivers = [to_user]
mail_msg = content message = MIMEText(mail_msg, 'html', 'utf-8') message['From'] = Header("网站监控", 'utf-8') message['To'] = Header("站长", 'utf-8')
subject = "网站监控告警" message['Subject'] = Header(subject, 'utf-8')
try: smtpObj = smtplib.SMTP_SSL("smtp.exmail.qq.com", 465) smtpObj.login('service@anycodes.cn', '密码') smtpObj.sendmail(sender, receivers, message.as_string()) except smtplib.SMTPException: pass

def getStatusCode(url): return urllib.request.urlopen(url).getcode()

def main_handler(event, context): url = "http://www.anycodes.cn" if getStatusCode(url) == 200: sendEmail("您的网站%s可以访问!" % (url), "service@52exe.cn")
复制代码


点击测试查看结果:



此时,手机上面接收到了提醒:



为我们是要监控网站不可访问的状态,所以修改一下判断:



修改完成之后,就可以保存了。考虑到这个脚本需要每隔一段时间都要触发一次,因此可以设置一个定时触发。



触发方式里面增加定时触发,并且保存即可,同时点击右上角的发布新版本:



这时,网站状态监控就已经上线。


升级监控脚本


有人说了,这样简单的一个脚本,意义大么?个人感觉意义很大,因为这个脚本,只是抛砖引玉,还有 Plus 版本:单纯根据状态判断靠谱么?我不要做一个访问时间统计?那么,就可以融合一个爬虫进入:


以网站测速网站:http://tool.chinaz.com/speedtest/anycodes.cn为例,可以看到:



是不是可以获得每个请求查看耗时呢?


通过网页分析,获得了每个测试点的 id 对应关系:


62a55a0e-387e-4d87-bf69-5e0c9dd6b983 江苏宿迁[电信]f403cdf2-27f8-4ccd-8f22-6f5a28a01309 广东佛山[电信]bcff47de-61bb-4bf7-9fe6-4e456067e540 广东惠州[电信]7740099a-6b60-49e0-9913-2f0b416ae63b 广东深圳[电信]2bfd90a0-4661-4920-9963-0241cd3fc0db 浙江湖州[电信]b698f5c4-0c88-4ae4-b123-ef57293ce442 辽宁大连[电信]7253644b-58d3-48bb-808a-3c8b9416cfd5 江苏泰州[电信]d8c0d1d1-9da8-4480-a9df-555731cdd7b8 安徽合肥[电信]299f5043-d454-4485-945f-a331d960d86e 江苏镇江[电信]38522b83-8893-4ca6-b45f-b6588b034462 云南昆明[电信]19705ba7-3816-4b35-976b-c3b8d69e78d2 湖南长沙[电信]8081b399-499a-4680-9a5a-723977cfea04 湖南衡阳[电信]5713f157-3378-495a-9c55-7172187e9f36 江苏宿迁[电信]a80cd07e-5508-4be6-8c83-524fe59318b8 江苏泰州[电信]4daa81e2-f397-4cde-bf74-b2bee84a4ea5 江苏宿迁[电信]bdd1ecd4-5516-44f8-8022-d83e4ac102f2 广东佛山[电信]6b6f9b1c-6154-4696-96d6-112248f902dc 北京[电信]8292e59e-ffde-4988-814f-4fe7fc4ec888 贵州兴义[电信]be09c5ce-3031-4565-8f6a-3e328e256e16 江苏扬州[电信]524906a3-2749-4469-aee3-48885f042a3a 江苏徐州[电信]fce17d47-07c3-4315-892b-acd76d918ada 广西南宁[电信]21cf6110-400c-4c6b-87c8-cada4ec3f6a7 浙江台州[电信]0c8ca9bf-fa7a-42a3-9148-f15ead65f45e 广东深圳[电信]b1499d95-7e3c-472a-9682-e58e1b362633 江西九江[电信]4130a733-57c7-432b-ab8d-735ccbefbc0a 山东枣庄[电信]066ab75f-0a74-40e8-b717-d17a71eda942 广东惠州[电信]1befa95d-cde1-473e-b851-38440d034f1c 江苏泰州[电信]c5ae6abd-901b-47c7-9018-7eda8b4441c6 陕西西安[电信]d1e4fc25-16e5-4651-a8d7-b8df50dda396 江苏镇江[电信]70a537ed-95b2-4bfd-b6b0-64c3920d9910 重庆[电信]e6a3a9b7-2088-41be-bf1d-6a25276ab1ed 江西吉安[电信]0e34cba2-fe5c-40d2-9ec7-e497f99365b8 广东广州[电信]547e8248-6dfb-4f4f-b52d-8a287e89b844 湖北随州[电信]df8bdd7a-b928-41f8-959f-d0d56fadea64 四川绵阳[电信]4e5d43e6-9d6a-4e5a-b495-a78c0921d26d 四川成都[电信]36d59519-d4bb-4635-8476-1d6ea27f62b2 江苏镇江[电信]bc25c8fd-62a1-4c57-a44d-0855b6c67714 四川绵阳[电信]0d3fd0b2-1255-4e5d-b94e-717569d2e8bd 江苏扬州[电信]47a0f82f-7dbb-48f4-96e0-d7a279ebba11 浙江宁波[电信]61d76c8c-b681-4196-b734-7d8e60f1e3ae 浙江绍兴[电信]da8bc796-4e65-48ef-beaa-d2ee1a7dd4bf 广东佛山[电信]cd787783-c0f5-486c-ac9f-34a80e386c34 广东佛山[电信]0e8d2e22-74db-4b31-9edd-fdda946dcd03 江苏常州[电信]5daad9ff-ced5-426a-8216-bf2aad097de0 浙江温州[电信]91a304a7-f91b-49ac-abbe-b77442cbc48c 上海[电信]12b16bb6-d42d-4296-a394-b96b22bca9c3 陕西咸阳[电信]bf9f80ef-1ef7-4267-aece-4fb1e5fe45bf 湖北荆门[电信]cd442c9e-de26-470f-bba2-33a8e71e4639 福建泉州[电信]9fef7898-e2d3-4c02-ab2a-5dc780f5a65c 河南新乡[电信]65078859-3e99-48eb-b170-7463fc53a98e 辽宁大连[电信]0165e09b-aad3-46c2-87e8-160432229f60 贵州兴义[电信]817bc339-c6f6-479c-9708-01ca54f2be80 江西新余[电信]1edc7af0-68ac-427b-a368-c27610797971 广东佛山[电信]9bc90d67-d208-434d-b680-294ae4288571 新疆哈密[电信]b44faece-c6fe-4cc1-ab9a-ae7dcf37f146 辽宁鞍山[电信]7fb11d87-1029-487b-8345-27e12a6acf1e 江苏镇江[电信]04d82618-d562-4aa7-9db6-4600dd7f4780 湖南衡阳[电信]252167a8-eaeb-491b-a4f3-319d25680f48 江苏宿迁[电信]22456bec-ad37-49e8-ba6f-032b3faaa0a0 湖北武汉[电信]5802da93-4e05-4932-9bc6-20d5d75b7af5 江苏宿迁[电信]a083795a-b69f-49fe-a905-cd8838c09553 浙江温州[电信]9c3b9aed-4b8a-4258-9b1f-55016211ced9 广东深圳[电信]2140cc66-e5ea-4f56-981a-8f044a98c92a 浙江绍兴[电信]9a8406ca-8a2d-44b7-a60e-4fe0ff6dd3aa 陕西西安[电信]8df24006-5e55-428c-9f29-9a2386480a4d 湖北仙桃[电信]cb2be8e0-670f-4922-8dd8-a1dd155cbf97 广东深圳[多线]c5964a0d-c49f-4fac-833d-2348b3b1304b 江苏常州[多线]19ef9d71-e0cb-4b79-a416-8fd670f6e7ca 江苏泰州[多线]5bea1430-f7c2-4146-88f4-17a7dc73a953 河南新乡[多线]1f430ff0-eae9-413a-af2a-1c2a8986cff0 河南新乡[多线]ea551b59-2609-4ab4-89bc-14b2080f501a 河南新乡[多线]4d462057-4581-4ae1-974d-ca7ca019e700 河南新乡[多线]9c137190-5a57-4ef5-be4b-b9add998ad52 河南新乡[多线]120ec517-1b0f-4b6e-841d-61116f73099a 广东东莞[多线]cbc3caa1-9faf-438c-abde-fbd5c64c8036 辽宁大连[多线]ba9e31d2-918a-41ad-9d0b-99175e365583 江苏扬州[多线]74cb6a5c-b044-49d0-abee-bf42beb6ae05 江苏宿迁[多线]e0cf79c5-9159-4ea6-a2a7-1bcaf9bfb292 山西运城[联通]2805fa9f-05ea-46bc-8ac0-1769b782bf52 黑龙江哈尔滨[联通]5439460c-0115-421a-b8ad-449eb2b4c28a 广东深圳[联通]9b7cbf0a-76b8-4308-8b66-9093dbe22541 浙江金华[联通]a4800428-7ed4-4c8a-a049-4b90df6919f0 河南郑州[联通]654abac8-7b37-4a64-9a84-2d190db3d060 山东枣庄[联通]1b6a98df-c2f4-4a29-b5b5-1e44ce6d1309 浙江金华[联通]32574c06-d0fc-4709-8fc9-fce30596efd3 河南郑州[联通]87068aa4-3b0e-4e22-814e-8ff838036e1b 浙江金华[联通]457575e4-cbbd-4796-89df-ad9707f19254 河南新乡[联通]4d7637d7-4950-4b79-9741-c397789bcf05 山东济南[联通]7f46f5c9-d719-4886-b3c0-6b6427908791 福建福州[联通]c48a380c-bac5-4976-b56c-53e9e5ebb691 江苏徐州[联通]b615642c-ac86-4322-9fbe-4bd79e175a99 广东深圳[联通]ddfeba9f-a432-4b9a-b0a9-ef76e9499558 浙江嘉兴[联通]102df90c-0bcc-404a-97cd-475fd408ff6f 江苏宿迁[联通]62909299-548b-4bbc-a92a-959e6104fc2c 江苏徐州[联通]de221437-2390-4404-9a00-26b0853cf943 江苏宿迁[联通]7a23256e-1121-4c39-ba12-1ff663ba952a 福建福州[联通]5074fb13-4ab9-4f0a-87d9-f8ae51cb81c5 江苏常州[移动]722e28ca-dd02-4ccd-a134-f9d4218505a5 广东深圳[移动]8e7a403c-d998-4efa-b3d1-b67c0dfabc41 广东深圳[移动]
复制代码


然后,可以根据这些关系,在本地测试:


以“62a55a0e-387e-4d87-bf69-5e0c9dd6b983 江苏宿迁[电信]“为例,编写代码:


import urllib.requestimport urllib.parse
url = "http://tool.chinaz.com/iframe.ashx?t=ping"form_data = { 'guid': '62a55a0e-387e-4d87-bf69-5e0c9dd6b983', 'host': 'anycodes.cn', 'ishost': '1', 'encode': 'ECvBP9vjbuXRi0CVhnXAbufDNPDryYzO', 'checktype': '1',}headers = { 'Host': 'tool.chinaz.com', 'Origin': 'http://tool.chinaz.com', 'Referer': 'http://tool.chinaz.com/speedtest/anycodes.cn', 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.108 Safari/537.36', 'X-Requested-With': 'XMLHttpRequest'}
print(urllib.request.urlopen( urllib.request.Request( url=url, data=urllib.parse.urlencode(form_data).encode('utf-8'), headers=headers )).read().decode("utf-8"))
复制代码


获得结果:


({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’


整合程序,对每个请求进行处理:


import urllib.requestimport urllib.parseimport retotal_list = '''62a55a0e-387e-4d87-bf69-5e0c9dd6b983 江苏宿迁[电信]f403cdf2-27f8-4ccd-8f22-6f5a28a01309 广东佛山[电信]bcff47de-61bb-4bf7-9fe6-4e456067e540 广东惠州[电信]7740099a-6b60-49e0-9913-2f0b416ae63b 广东深圳[电信]2bfd90a0-4661-4920-9963-0241cd3fc0db 浙江湖州[电信]b698f5c4-0c88-4ae4-b123-ef57293ce442 辽宁大连[电信]7253644b-58d3-48bb-808a-3c8b9416cfd5 江苏泰州[电信]d8c0d1d1-9da8-4480-a9df-555731cdd7b8 安徽合肥[电信]299f5043-d454-4485-945f-a331d960d86e 江苏镇江[电信]38522b83-8893-4ca6-b45f-b6588b034462 云南昆明[电信]19705ba7-3816-4b35-976b-c3b8d69e78d2 湖南长沙[电信]8081b399-499a-4680-9a5a-723977cfea04 湖南衡阳[电信]5713f157-3378-495a-9c55-7172187e9f36 江苏宿迁[电信]a80cd07e-5508-4be6-8c83-524fe59318b8 江苏泰州[电信]4daa81e2-f397-4cde-bf74-b2bee84a4ea5 江苏宿迁[电信]bdd1ecd4-5516-44f8-8022-d83e4ac102f2 广东佛山[电信]6b6f9b1c-6154-4696-96d6-112248f902dc 北京[电信]8292e59e-ffde-4988-814f-4fe7fc4ec888 贵州兴义[电信]be09c5ce-3031-4565-8f6a-3e328e256e16 江苏扬州[电信]524906a3-2749-4469-aee3-48885f042a3a 江苏徐州[电信]fce17d47-07c3-4315-892b-acd76d918ada 广西南宁[电信]21cf6110-400c-4c6b-87c8-cada4ec3f6a7 浙江台州[电信]0c8ca9bf-fa7a-42a3-9148-f15ead65f45e 广东深圳[电信]b1499d95-7e3c-472a-9682-e58e1b362633 江西九江[电信]4130a733-57c7-432b-ab8d-735ccbefbc0a 山东枣庄[电信]066ab75f-0a74-40e8-b717-d17a71eda942 广东惠州[电信]1befa95d-cde1-473e-b851-38440d034f1c 江苏泰州[电信]c5ae6abd-901b-47c7-9018-7eda8b4441c6 陕西西安[电信]d1e4fc25-16e5-4651-a8d7-b8df50dda396 江苏镇江[电信]70a537ed-95b2-4bfd-b6b0-64c3920d9910 重庆[电信]e6a3a9b7-2088-41be-bf1d-6a25276ab1ed 江西吉安[电信]0e34cba2-fe5c-40d2-9ec7-e497f99365b8 广东广州[电信]547e8248-6dfb-4f4f-b52d-8a287e89b844 湖北随州[电信]df8bdd7a-b928-41f8-959f-d0d56fadea64 四川绵阳[电信]4e5d43e6-9d6a-4e5a-b495-a78c0921d26d 四川成都[电信]36d59519-d4bb-4635-8476-1d6ea27f62b2 江苏镇江[电信]bc25c8fd-62a1-4c57-a44d-0855b6c67714 四川绵阳[电信]0d3fd0b2-1255-4e5d-b94e-717569d2e8bd 江苏扬州[电信]47a0f82f-7dbb-48f4-96e0-d7a279ebba11 浙江宁波[电信]61d76c8c-b681-4196-b734-7d8e60f1e3ae 浙江绍兴[电信]da8bc796-4e65-48ef-beaa-d2ee1a7dd4bf 广东佛山[电信]cd787783-c0f5-486c-ac9f-34a80e386c34 广东佛山[电信]0e8d2e22-74db-4b31-9edd-fdda946dcd03 江苏常州[电信]5daad9ff-ced5-426a-8216-bf2aad097de0 浙江温州[电信]91a304a7-f91b-49ac-abbe-b77442cbc48c 上海[电信]12b16bb6-d42d-4296-a394-b96b22bca9c3 陕西咸阳[电信]bf9f80ef-1ef7-4267-aece-4fb1e5fe45bf 湖北荆门[电信]cd442c9e-de26-470f-bba2-33a8e71e4639 福建泉州[电信]9fef7898-e2d3-4c02-ab2a-5dc780f5a65c 河南新乡[电信]65078859-3e99-48eb-b170-7463fc53a98e 辽宁大连[电信]0165e09b-aad3-46c2-87e8-160432229f60 贵州兴义[电信]817bc339-c6f6-479c-9708-01ca54f2be80 江西新余[电信]1edc7af0-68ac-427b-a368-c27610797971 广东佛山[电信]9bc90d67-d208-434d-b680-294ae4288571 新疆哈密[电信]b44faece-c6fe-4cc1-ab9a-ae7dcf37f146 辽宁鞍山[电信]7fb11d87-1029-487b-8345-27e12a6acf1e 江苏镇江[电信]04d82618-d562-4aa7-9db6-4600dd7f4780 湖南衡阳[电信]252167a8-eaeb-491b-a4f3-319d25680f48 江苏宿迁[电信]22456bec-ad37-49e8-ba6f-032b3faaa0a0 湖北武汉[电信]5802da93-4e05-4932-9bc6-20d5d75b7af5 江苏宿迁[电信]a083795a-b69f-49fe-a905-cd8838c09553 浙江温州[电信]9c3b9aed-4b8a-4258-9b1f-55016211ced9 广东深圳[电信]2140cc66-e5ea-4f56-981a-8f044a98c92a 浙江绍兴[电信]9a8406ca-8a2d-44b7-a60e-4fe0ff6dd3aa 陕西西安[电信]8df24006-5e55-428c-9f29-9a2386480a4d 湖北仙桃[电信]cb2be8e0-670f-4922-8dd8-a1dd155cbf97 广东深圳[多线]c5964a0d-c49f-4fac-833d-2348b3b1304b 江苏常州[多线]19ef9d71-e0cb-4b79-a416-8fd670f6e7ca 江苏泰州[多线]5bea1430-f7c2-4146-88f4-17a7dc73a953 河南新乡[多线]1f430ff0-eae9-413a-af2a-1c2a8986cff0 河南新乡[多线]ea551b59-2609-4ab4-89bc-14b2080f501a 河南新乡[多线]4d462057-4581-4ae1-974d-ca7ca019e700 河南新乡[多线]9c137190-5a57-4ef5-be4b-b9add998ad52 河南新乡[多线]120ec517-1b0f-4b6e-841d-61116f73099a 广东东莞[多线]cbc3caa1-9faf-438c-abde-fbd5c64c8036 辽宁大连[多线]ba9e31d2-918a-41ad-9d0b-99175e365583 江苏扬州[多线]74cb6a5c-b044-49d0-abee-bf42beb6ae05 江苏宿迁[多线]e0cf79c5-9159-4ea6-a2a7-1bcaf9bfb292 山西运城[联通]2805fa9f-05ea-46bc-8ac0-1769b782bf52 黑龙江哈尔滨[联通]5439460c-0115-421a-b8ad-449eb2b4c28a 广东深圳[联通]9b7cbf0a-76b8-4308-8b66-9093dbe22541 浙江金华[联通]a4800428-7ed4-4c8a-a049-4b90df6919f0 河南郑州[联通]654abac8-7b37-4a64-9a84-2d190db3d060 山东枣庄[联通]1b6a98df-c2f4-4a29-b5b5-1e44ce6d1309 浙江金华[联通]32574c06-d0fc-4709-8fc9-fce30596efd3 河南郑州[联通]87068aa4-3b0e-4e22-814e-8ff838036e1b 浙江金华[联通]457575e4-cbbd-4796-89df-ad9707f19254 河南新乡[联通]4d7637d7-4950-4b79-9741-c397789bcf05 山东济南[联通]7f46f5c9-d719-4886-b3c0-6b6427908791 福建福州[联通]c48a380c-bac5-4976-b56c-53e9e5ebb691 江苏徐州[联通]b615642c-ac86-4322-9fbe-4bd79e175a99 广东深圳[联通]ddfeba9f-a432-4b9a-b0a9-ef76e9499558 浙江嘉兴[联通]102df90c-0bcc-404a-97cd-475fd408ff6f 江苏宿迁[联通]62909299-548b-4bbc-a92a-959e6104fc2c 江苏徐州[联通]de221437-2390-4404-9a00-26b0853cf943 江苏宿迁[联通]7a23256e-1121-4c39-ba12-1ff663ba952a 福建福州[联通]5074fb13-4ab9-4f0a-87d9-f8ae51cb81c5 江苏常州[移动]722e28ca-dd02-4ccd-a134-f9d4218505a5 广东深圳[移动]8e7a403c-d998-4efa-b3d1-b67c0dfabc41 广东深圳[移动]'''
url = "http://tool.chinaz.com/iframe.ashx?t=ping"
for eve in total_list.split('\n'): id_data, node_name = eve.strip().split(" ")
form_data = { 'guid': id_data, 'host': 'anycodes.cn', 'ishost': '1', 'encode': 'ECvBP9vjbuXRi0CVhnXAbufDNPDryYzO', 'checktype': '1', } headers = { 'Host': 'tool.chinaz.com', 'Origin': 'http://tool.chinaz.com', 'Referer': 'http://tool.chinaz.com/speedtest/anycodes.cn', 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.108 Safari/537.36', 'X-Requested-With': 'XMLHttpRequest' }
result_data = urllib.request.urlopen( urllib.request.Request( url=url, data=urllib.parse.urlencode(form_data).encode('utf-8'), headers=headers ) ).read().decode("utf-8")
# print(result_data)
try: alltime = re.findall("alltime:'(.*?)'",result_data)[0] conntime = re.findall("conntime:'(.*?)'", result_data)[0] downtime = re.findall("downtime:'(.*?)'", result_data)[0] final_string = "%s\t总耗时:%s\t链接耗时:%s\t下载耗时:%s"%(node_name, alltime, conntime, downtime) except: final_string = "%s链接异常!"
print(final_string)
复制代码


运行结果:


江苏宿迁[电信]  总耗时:223  链接耗时:121  下载耗时:81广东佛山[电信]  总耗时:44  链接耗时:27  下载耗时:17广东惠州[电信]  总耗时:56  链接耗时:34  下载耗时:22广东深圳[电信]  总耗时:149  链接耗时:36  下载耗时:25浙江湖州[电信]  总耗时:3190  链接耗时:3115  下载耗时:75辽宁大连[电信]  总耗时:468  链接耗时:255  下载耗时:170江苏泰州[电信]  总耗时:180  链接耗时:104  下载耗时:69安徽合肥[电信]  总耗时:196  链接耗时:110  下载耗时:73...
复制代码


将该部分内容融合之前的脚本中:


# -*- coding: utf8 -*-import sslimport jsonimport reimport socketimport smtplibimport urllib.requestfrom email.mime.text import MIMETextfrom email.header import Header
socket.setdefaulttimeout(2.5)ssl._create_default_https_context = ssl._create_unverified_context
def getWebTime():
final_list = [] final_status = True
total_list = '''62a55a0e-387e-4d87-bf69-5e0c9dd6b983 江苏宿迁[电信] f403cdf2-27f8-4ccd-8f22-6f5a28a01309 广东佛山[电信] bcff47de-61bb-4bf7-9fe6-4e456067e540 广东惠州[电信] 7740099a-6b60-49e0-9913-2f0b416ae63b 广东深圳[电信] 2bfd90a0-4661-4920-9963-0241cd3fc0db 浙江湖州[电信] b698f5c4-0c88-4ae4-b123-ef57293ce442 辽宁大连[电信] 7253644b-58d3-48bb-808a-3c8b9416cfd5 江苏泰州[电信] d8c0d1d1-9da8-4480-a9df-555731cdd7b8 安徽合肥[电信] 299f5043-d454-4485-945f-a331d960d86e 江苏镇江[电信] 38522b83-8893-4ca6-b45f-b6588b034462 云南昆明[电信] 19705ba7-3816-4b35-976b-c3b8d69e78d2 湖南长沙[电信] 8081b399-499a-4680-9a5a-723977cfea04 湖南衡阳[电信] 5713f157-3378-495a-9c55-7172187e9f36 江苏宿迁[电信] a80cd07e-5508-4be6-8c83-524fe59318b8 江苏泰州[电信] 4daa81e2-f397-4cde-bf74-b2bee84a4ea5 江苏宿迁[电信] bdd1ecd4-5516-44f8-8022-d83e4ac102f2 广东佛山[电信] 6b6f9b1c-6154-4696-96d6-112248f902dc 北京[电信] 8292e59e-ffde-4988-814f-4fe7fc4ec888 贵州兴义[电信] be09c5ce-3031-4565-8f6a-3e328e256e16 江苏扬州[电信] 524906a3-2749-4469-aee3-48885f042a3a 江苏徐州[电信] fce17d47-07c3-4315-892b-acd76d918ada 广西南宁[电信] 21cf6110-400c-4c6b-87c8-cada4ec3f6a7 浙江台州[电信] 0c8ca9bf-fa7a-42a3-9148-f15ead65f45e 广东深圳[电信] b1499d95-7e3c-472a-9682-e58e1b362633 江西九江[电信] 4130a733-57c7-432b-ab8d-735ccbefbc0a 山东枣庄[电信] 066ab75f-0a74-40e8-b717-d17a71eda942 广东惠州[电信] 1befa95d-cde1-473e-b851-38440d034f1c 江苏泰州[电信] c5ae6abd-901b-47c7-9018-7eda8b4441c6 陕西西安[电信] d1e4fc25-16e5-4651-a8d7-b8df50dda396 江苏镇江[电信] 70a537ed-95b2-4bfd-b6b0-64c3920d9910 重庆[电信] e6a3a9b7-2088-41be-bf1d-6a25276ab1ed 江西吉安[电信] 0e34cba2-fe5c-40d2-9ec7-e497f99365b8 广东广州[电信] 547e8248-6dfb-4f4f-b52d-8a287e89b844 湖北随州[电信] df8bdd7a-b928-41f8-959f-d0d56fadea64 四川绵阳[电信] 4e5d43e6-9d6a-4e5a-b495-a78c0921d26d 四川成都[电信] 36d59519-d4bb-4635-8476-1d6ea27f62b2 江苏镇江[电信] bc25c8fd-62a1-4c57-a44d-0855b6c67714 四川绵阳[电信] 0d3fd0b2-1255-4e5d-b94e-717569d2e8bd 江苏扬州[电信] 47a0f82f-7dbb-48f4-96e0-d7a279ebba11 浙江宁波[电信] 61d76c8c-b681-4196-b734-7d8e60f1e3ae 浙江绍兴[电信] da8bc796-4e65-48ef-beaa-d2ee1a7dd4bf 广东佛山[电信] cd787783-c0f5-486c-ac9f-34a80e386c34 广东佛山[电信] 0e8d2e22-74db-4b31-9edd-fdda946dcd03 江苏常州[电信] 5daad9ff-ced5-426a-8216-bf2aad097de0 浙江温州[电信] 91a304a7-f91b-49ac-abbe-b77442cbc48c 上海[电信] 12b16bb6-d42d-4296-a394-b96b22bca9c3 陕西咸阳[电信] bf9f80ef-1ef7-4267-aece-4fb1e5fe45bf 湖北荆门[电信] cd442c9e-de26-470f-bba2-33a8e71e4639 福建泉州[电信] 9fef7898-e2d3-4c02-ab2a-5dc780f5a65c 河南新乡[电信] 65078859-3e99-48eb-b170-7463fc53a98e 辽宁大连[电信] 0165e09b-aad3-46c2-87e8-160432229f60 贵州兴义[电信] 817bc339-c6f6-479c-9708-01ca54f2be80 江西新余[电信] 1edc7af0-68ac-427b-a368-c27610797971 广东佛山[电信] 9bc90d67-d208-434d-b680-294ae4288571 新疆哈密[电信] b44faece-c6fe-4cc1-ab9a-ae7dcf37f146 辽宁鞍山[电信] 7fb11d87-1029-487b-8345-27e12a6acf1e 江苏镇江[电信] 04d82618-d562-4aa7-9db6-4600dd7f4780 湖南衡阳[电信] 252167a8-eaeb-491b-a4f3-319d25680f48 江苏宿迁[电信] 22456bec-ad37-49e8-ba6f-032b3faaa0a0 湖北武汉[电信] 5802da93-4e05-4932-9bc6-20d5d75b7af5 江苏宿迁[电信] a083795a-b69f-49fe-a905-cd8838c09553 浙江温州[电信] 9c3b9aed-4b8a-4258-9b1f-55016211ced9 广东深圳[电信] 2140cc66-e5ea-4f56-981a-8f044a98c92a 浙江绍兴[电信] 9a8406ca-8a2d-44b7-a60e-4fe0ff6dd3aa 陕西西安[电信] 8df24006-5e55-428c-9f29-9a2386480a4d 湖北仙桃[电信] cb2be8e0-670f-4922-8dd8-a1dd155cbf97 广东深圳[多线] c5964a0d-c49f-4fac-833d-2348b3b1304b 江苏常州[多线] 19ef9d71-e0cb-4b79-a416-8fd670f6e7ca 江苏泰州[多线] 5bea1430-f7c2-4146-88f4-17a7dc73a953 河南新乡[多线] 1f430ff0-eae9-413a-af2a-1c2a8986cff0 河南新乡[多线] ea551b59-2609-4ab4-89bc-14b2080f501a 河南新乡[多线] 4d462057-4581-4ae1-974d-ca7ca019e700 河南新乡[多线] 9c137190-5a57-4ef5-be4b-b9add998ad52 河南新乡[多线] 120ec517-1b0f-4b6e-841d-61116f73099a 广东东莞[多线] cbc3caa1-9faf-438c-abde-fbd5c64c8036 辽宁大连[多线] ba9e31d2-918a-41ad-9d0b-99175e365583 江苏扬州[多线] 74cb6a5c-b044-49d0-abee-bf42beb6ae05 江苏宿迁[多线] e0cf79c5-9159-4ea6-a2a7-1bcaf9bfb292 山西运城[联通] 2805fa9f-05ea-46bc-8ac0-1769b782bf52 黑龙江哈尔滨[联通] 5439460c-0115-421a-b8ad-449eb2b4c28a 广东深圳[联通] 9b7cbf0a-76b8-4308-8b66-9093dbe22541 浙江金华[联通] a4800428-7ed4-4c8a-a049-4b90df6919f0 河南郑州[联通] 654abac8-7b37-4a64-9a84-2d190db3d060 山东枣庄[联通] 1b6a98df-c2f4-4a29-b5b5-1e44ce6d1309 浙江金华[联通] 32574c06-d0fc-4709-8fc9-fce30596efd3 河南郑州[联通] 87068aa4-3b0e-4e22-814e-8ff838036e1b 浙江金华[联通] 457575e4-cbbd-4796-89df-ad9707f19254 河南新乡[联通] 4d7637d7-4950-4b79-9741-c397789bcf05 山东济南[联通] 7f46f5c9-d719-4886-b3c0-6b6427908791 福建福州[联通] c48a380c-bac5-4976-b56c-53e9e5ebb691 江苏徐州[联通] b615642c-ac86-4322-9fbe-4bd79e175a99 广东深圳[联通] ddfeba9f-a432-4b9a-b0a9-ef76e9499558 浙江嘉兴[联通] 102df90c-0bcc-404a-97cd-475fd408ff6f 江苏宿迁[联通] 62909299-548b-4bbc-a92a-959e6104fc2c 江苏徐州[联通] de221437-2390-4404-9a00-26b0853cf943 江苏宿迁[联通] 7a23256e-1121-4c39-ba12-1ff663ba952a 福建福州[联通] 5074fb13-4ab9-4f0a-87d9-f8ae51cb81c5 江苏常州[移动] 722e28ca-dd02-4ccd-a134-f9d4218505a5 广东深圳[移动] 8e7a403c-d998-4efa-b3d1-b67c0dfabc41 广东深圳[移动]'''
url = "http://tool.chinaz.com/iframe.ashx?t=ping"
for eve in total_list.split('\n'): id_data, node_name = eve.strip().split(" ")
form_data = { 'guid': id_data, 'host': 'anycodes.cn', 'ishost': '1', 'encode': 'ECvBP9vjbuXRi0CVhnXAbufDNPDryYzO', 'checktype': '1', } headers = { 'Host': 'tool.chinaz.com', 'Origin': 'http://tool.chinaz.com', 'Referer': 'http://tool.chinaz.com/speedtest/anycodes.cn', 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.108 Safari/537.36', 'X-Requested-With': 'XMLHttpRequest' }
try: result_data = urllib.request.urlopen( urllib.request.Request( url=url, data=urllib.parse.urlencode(form_data).encode('utf-8'), headers=headers ) ).read().decode("utf-8")
try: alltime = re.findall("alltime:'(.*?)'", result_data)[0] conntime = re.findall("conntime:'(.*?)'", result_data)[0] downtime = re.findall("downtime:'(.*?)'", result_data)[0] final_string = "%s\t总耗时:%s\t链接耗时:%s\t下载耗时:%s" % (node_name, alltime, conntime, downtime) except: final_string = "%s链接异常!" % (node_name) final_status = False except: final_string = "%s链接超时!" % (node_name) final_status = False final_list.append(final_string) print(final_string) return (final_status,final_list)

def sendEmail(content, to_user): sender = 'service@anycodes.cn' receivers = [to_user]
mail_msg = content message = MIMEText(mail_msg, 'html', 'utf-8') message['From'] = Header("网站监控", 'utf-8') message['To'] = Header("站长", 'utf-8')
subject = "网站监控告警" message['Subject'] = Header(subject, 'utf-8')
try: smtpObj = smtplib.SMTP_SSL("smtp.exmail.qq.com", 465) smtpObj.login('service@anycodes.cn', '密码') smtpObj.sendmail(sender, receivers, message.as_string()) except smtplib.SMTPException: pass

def getStatusCode(url): return urllib.request.urlopen(url).getcode()

def main_handler(event, context): url = "http://www.anycodes.cn" # if getStatusCode(url) == 200: # sendEmail("您的网站%s可以访问!" % (url), "service@52exe.cn") final_status,final_list = getWebTime() if final_status: sendEmail("您的网站%s的状态:<br>%s" % (url, "<br>".join(final_list)), "service@52exe.cn") else: sendEmail("您的网站%s的状态:<br>%s" % (url, "<br>".join(final_list)), "service@52exe.cn")
复制代码


由于这个程序,可能运行的时间有点长,所以需要对云函数的 timeout 进行修改:



修改之后,可以测试和部署一下:



然后,可以部署到线上。



当然,这里可能还有一些小问题,那就是,很可能某些测试节点出问题,导致网站无法访问,所以这个告警机制可以重新编排一下:


当 n 个节点出现问题,再进行告警:


# -*- coding: utf8 -*-import sslimport jsonimport reimport socketimport smtplibimport urllib.requestfrom email.mime.text import MIMETextfrom email.header import Header
socket.setdefaulttimeout(2.5)ssl._create_default_https_context = ssl._create_unverified_context
def getWebTime():
final_list = [] final_status_time = 6 start_time = 0
total_list = '''62a55a0e-387e-4d87-bf69-5e0c9dd6b983 江苏宿迁[电信] f403cdf2-27f8-4ccd-8f22-6f5a28a01309 广东佛山[电信] bcff47de-61bb-4bf7-9fe6-4e456067e540 广东惠州[电信] 7740099a-6b60-49e0-9913-2f0b416ae63b 广东深圳[电信] 2bfd90a0-4661-4920-9963-0241cd3fc0db 浙江湖州[电信] b698f5c4-0c88-4ae4-b123-ef57293ce442 辽宁大连[电信] 7253644b-58d3-48bb-808a-3c8b9416cfd5 江苏泰州[电信] d8c0d1d1-9da8-4480-a9df-555731cdd7b8 安徽合肥[电信] 299f5043-d454-4485-945f-a331d960d86e 江苏镇江[电信] 38522b83-8893-4ca6-b45f-b6588b034462 云南昆明[电信] 19705ba7-3816-4b35-976b-c3b8d69e78d2 湖南长沙[电信] 8081b399-499a-4680-9a5a-723977cfea04 湖南衡阳[电信] 5713f157-3378-495a-9c55-7172187e9f36 江苏宿迁[电信] a80cd07e-5508-4be6-8c83-524fe59318b8 江苏泰州[电信] 4daa81e2-f397-4cde-bf74-b2bee84a4ea5 江苏宿迁[电信] bdd1ecd4-5516-44f8-8022-d83e4ac102f2 广东佛山[电信] 6b6f9b1c-6154-4696-96d6-112248f902dc 北京[电信] 8292e59e-ffde-4988-814f-4fe7fc4ec888 贵州兴义[电信] be09c5ce-3031-4565-8f6a-3e328e256e16 江苏扬州[电信] 524906a3-2749-4469-aee3-48885f042a3a 江苏徐州[电信] fce17d47-07c3-4315-892b-acd76d918ada 广西南宁[电信] 21cf6110-400c-4c6b-87c8-cada4ec3f6a7 浙江台州[电信] 0c8ca9bf-fa7a-42a3-9148-f15ead65f45e 广东深圳[电信] b1499d95-7e3c-472a-9682-e58e1b362633 江西九江[电信] 4130a733-57c7-432b-ab8d-735ccbefbc0a 山东枣庄[电信] 066ab75f-0a74-40e8-b717-d17a71eda942 广东惠州[电信] 1befa95d-cde1-473e-b851-38440d034f1c 江苏泰州[电信] c5ae6abd-901b-47c7-9018-7eda8b4441c6 陕西西安[电信] d1e4fc25-16e5-4651-a8d7-b8df50dda396 江苏镇江[电信] 70a537ed-95b2-4bfd-b6b0-64c3920d9910 重庆[电信] e6a3a9b7-2088-41be-bf1d-6a25276ab1ed 江西吉安[电信] 0e34cba2-fe5c-40d2-9ec7-e497f99365b8 广东广州[电信] 547e8248-6dfb-4f4f-b52d-8a287e89b844 湖北随州[电信] df8bdd7a-b928-41f8-959f-d0d56fadea64 四川绵阳[电信] 4e5d43e6-9d6a-4e5a-b495-a78c0921d26d 四川成都[电信] 36d59519-d4bb-4635-8476-1d6ea27f62b2 江苏镇江[电信] bc25c8fd-62a1-4c57-a44d-0855b6c67714 四川绵阳[电信] 0d3fd0b2-1255-4e5d-b94e-717569d2e8bd 江苏扬州[电信] 47a0f82f-7dbb-48f4-96e0-d7a279ebba11 浙江宁波[电信] 61d76c8c-b681-4196-b734-7d8e60f1e3ae 浙江绍兴[电信] da8bc796-4e65-48ef-beaa-d2ee1a7dd4bf 广东佛山[电信] cd787783-c0f5-486c-ac9f-34a80e386c34 广东佛山[电信] 0e8d2e22-74db-4b31-9edd-fdda946dcd03 江苏常州[电信] 5daad9ff-ced5-426a-8216-bf2aad097de0 浙江温州[电信] 91a304a7-f91b-49ac-abbe-b77442cbc48c 上海[电信] 12b16bb6-d42d-4296-a394-b96b22bca9c3 陕西咸阳[电信] bf9f80ef-1ef7-4267-aece-4fb1e5fe45bf 湖北荆门[电信] cd442c9e-de26-470f-bba2-33a8e71e4639 福建泉州[电信] 9fef7898-e2d3-4c02-ab2a-5dc780f5a65c 河南新乡[电信] 65078859-3e99-48eb-b170-7463fc53a98e 辽宁大连[电信] 0165e09b-aad3-46c2-87e8-160432229f60 贵州兴义[电信] 817bc339-c6f6-479c-9708-01ca54f2be80 江西新余[电信] 1edc7af0-68ac-427b-a368-c27610797971 广东佛山[电信] 9bc90d67-d208-434d-b680-294ae4288571 新疆哈密[电信] b44faece-c6fe-4cc1-ab9a-ae7dcf37f146 辽宁鞍山[电信] 7fb11d87-1029-487b-8345-27e12a6acf1e 江苏镇江[电信] 04d82618-d562-4aa7-9db6-4600dd7f4780 湖南衡阳[电信] 252167a8-eaeb-491b-a4f3-319d25680f48 江苏宿迁[电信] 22456bec-ad37-49e8-ba6f-032b3faaa0a0 湖北武汉[电信] 5802da93-4e05-4932-9bc6-20d5d75b7af5 江苏宿迁[电信] a083795a-b69f-49fe-a905-cd8838c09553 浙江温州[电信] 9c3b9aed-4b8a-4258-9b1f-55016211ced9 广东深圳[电信] 2140cc66-e5ea-4f56-981a-8f044a98c92a 浙江绍兴[电信] 9a8406ca-8a2d-44b7-a60e-4fe0ff6dd3aa 陕西西安[电信] 8df24006-5e55-428c-9f29-9a2386480a4d 湖北仙桃[电信] cb2be8e0-670f-4922-8dd8-a1dd155cbf97 广东深圳[多线] c5964a0d-c49f-4fac-833d-2348b3b1304b 江苏常州[多线] 19ef9d71-e0cb-4b79-a416-8fd670f6e7ca 江苏泰州[多线] 5bea1430-f7c2-4146-88f4-17a7dc73a953 河南新乡[多线] 1f430ff0-eae9-413a-af2a-1c2a8986cff0 河南新乡[多线] ea551b59-2609-4ab4-89bc-14b2080f501a 河南新乡[多线] 4d462057-4581-4ae1-974d-ca7ca019e700 河南新乡[多线] 9c137190-5a57-4ef5-be4b-b9add998ad52 河南新乡[多线] 120ec517-1b0f-4b6e-841d-61116f73099a 广东东莞[多线] cbc3caa1-9faf-438c-abde-fbd5c64c8036 辽宁大连[多线] ba9e31d2-918a-41ad-9d0b-99175e365583 江苏扬州[多线] 74cb6a5c-b044-49d0-abee-bf42beb6ae05 江苏宿迁[多线] e0cf79c5-9159-4ea6-a2a7-1bcaf9bfb292 山西运城[联通] 2805fa9f-05ea-46bc-8ac0-1769b782bf52 黑龙江哈尔滨[联通] 5439460c-0115-421a-b8ad-449eb2b4c28a 广东深圳[联通] 9b7cbf0a-76b8-4308-8b66-9093dbe22541 浙江金华[联通] a4800428-7ed4-4c8a-a049-4b90df6919f0 河南郑州[联通] 654abac8-7b37-4a64-9a84-2d190db3d060 山东枣庄[联通] 1b6a98df-c2f4-4a29-b5b5-1e44ce6d1309 浙江金华[联通] 32574c06-d0fc-4709-8fc9-fce30596efd3 河南郑州[联通] 87068aa4-3b0e-4e22-814e-8ff838036e1b 浙江金华[联通] 457575e4-cbbd-4796-89df-ad9707f19254 河南新乡[联通] 4d7637d7-4950-4b79-9741-c397789bcf05 山东济南[联通] 7f46f5c9-d719-4886-b3c0-6b6427908791 福建福州[联通] c48a380c-bac5-4976-b56c-53e9e5ebb691 江苏徐州[联通] b615642c-ac86-4322-9fbe-4bd79e175a99 广东深圳[联通] ddfeba9f-a432-4b9a-b0a9-ef76e9499558 浙江嘉兴[联通] 102df90c-0bcc-404a-97cd-475fd408ff6f 江苏宿迁[联通] 62909299-548b-4bbc-a92a-959e6104fc2c 江苏徐州[联通] de221437-2390-4404-9a00-26b0853cf943 江苏宿迁[联通] 7a23256e-1121-4c39-ba12-1ff663ba952a 福建福州[联通] 5074fb13-4ab9-4f0a-87d9-f8ae51cb81c5 江苏常州[移动] 722e28ca-dd02-4ccd-a134-f9d4218505a5 广东深圳[移动] 8e7a403c-d998-4efa-b3d1-b67c0dfabc41 广东深圳[移动]'''
url = "http://tool.chinaz.com/iframe.ashx?t=ping"
for eve in total_list.split('\n'): id_data, node_name = eve.strip().split(" ")
form_data = { 'guid': id_data, 'host': 'anycodes.cn', 'ishost': '1', 'encode': 'ECvBP9vjbuXRi0CVhnXAbufDNPDryYzO', 'checktype': '1', } headers = { 'Host': 'tool.chinaz.com', 'Origin': 'http://tool.chinaz.com', 'Referer': 'http://tool.chinaz.com/speedtest/anycodes.cn', 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.108 Safari/537.36', 'X-Requested-With': 'XMLHttpRequest' }
try: result_data = urllib.request.urlopen( urllib.request.Request( url=url, data=urllib.parse.urlencode(form_data).encode('utf-8'), headers=headers ) ).read().decode("utf-8")
try: alltime = re.findall("alltime:'(.*?)'", result_data)[0] conntime = re.findall("conntime:'(.*?)'", result_data)[0] downtime = re.findall("downtime:'(.*?)'", result_data)[0] final_string = "%s\t总耗时:%s\t链接耗时:%s\t下载耗时:%s" % (node_name, alltime, conntime, downtime) except: final_string = "%s链接异常!" % (node_name) start_time = start_time + 1 except: final_string = "%s链接超时!" % (node_name) start_time = start_time + 1 final_list.append(final_string) print(final_string) if start_time > final_status_time: return (False,final_list) else: return (True, final_list)
def sendEmail(content, to_user): sender = 'service@anycodes.cn' receivers = [to_user]
mail_msg = content message = MIMEText(mail_msg, 'html', 'utf-8') message['From'] = Header("网站监控", 'utf-8') message['To'] = Header("站长", 'utf-8')
subject = "网站监控告警" message['Subject'] = Header(subject, 'utf-8')
try: smtpObj = smtplib.SMTP_SSL("smtp.exmail.qq.com", 465) smtpObj.login('service@anycodes.cn', '密码') smtpObj.sendmail(sender, receivers, message.as_string()) except smtplib.SMTPException: pass

def getStatusCode(url): return urllib.request.urlopen(url).getcode()

def main_handler(event, context): url = "http://www.anycodes.cn" # if getStatusCode(url) == 200: # sendEmail("您的网站%s可以访问!" % (url), "service@52exe.cn") final_status,final_list = getWebTime() if final_status: sendEmail("您的网站%s的状态:<br>%s" % (url, "<br>".join(final_list)), "service@52exe.cn") else: sendEmail("您的网站%s的状态:<br>%s" % (url, "<br>".join(final_list)), "service@52exe.cn")


main_handler(None,None)
复制代码


灵感启发:PPPlus 版本


可能有时候不是监控自己的网站,而是要监控别人网站的某些行为,例如某个小说是否更新了,某个视频是否更新了,某个产品是否发布了,某个成绩是否出来… 其实这些情景都可以用腾讯云的函数计算来开发,非常简单方便。


作者介绍:


刘宇,腾讯云 Serverless 团队后台研发工程师。毕业于浙江大学,先后参与腾讯云云函数产品研发、自动扩缩容、CLI 等模块建设以及社区相关工作。本文转载自微信公众号 ServerlessCloudNative(ID:ServerlessGo)


《Serverless 实践系列(一):如何通过 SCF 与自然语言处理为网站赋能》


《Serverless 实践系列(二):为 Python 云函数打包依赖》


《Serverless 实践系列(三):突破传统 OJ 瓶颈,“判题姬”接入云函数》


2019 年 8 月 16 日 15:3517250

评论

发布
暂无评论
发现更多内容

PIP的报错Could not fetch URL https://pypi.org/

陈磊@Criss

Nginx的容器部署

陈磊@Criss

DockerFile 详解

陈磊@Criss

聊聊微前端的原理和实践

vivo互联网技术

前端 微前端

你还应该知道的哈希冲突解决策略

vivo互联网技术

哈希冲突

分布式定时任务调度框架实践

vivo互联网技术

分布式 大数据任务调度 框架

企业微信群消息机器人发送开源项目

陈磊@Criss

微信小程序的自动化测试框架

陈磊@Criss

最受欢迎的男友职业排行榜Top10

程序员生活志

程序员

Python的Twisted事件驱动的网络引擎框架

陈磊@Criss

国内程序员最容易发音错误的单词集合

程序员生活志

程序员 经验总结

优质单元测试的十大标准,你有遵循吗?

陈琦

项目管理 单元测试 自动化测试

好玩又好用,一款轻松就可以实现音视频的Demo

anyRTC开发者

音视频 移动互联网 RTC anyRTC Demo

jmeter 执行python脚本

陈磊@Criss

Docker的Image

陈磊@Criss

pipreqs:生成python项目的requirements

陈磊@Criss

Docker 容器连接

陈磊@Criss

Kafka实战宝典:一文带解决Kafka常见故障处理

数据社

kafka 监控

高中生写LOL外挂1年狂赚500万,落网前刚买下120万保时捷...

程序员生活志

编程 程序员 外挂

Clover:解决Java8和Cobertura的问题以及解决方法

陈磊@Criss

python判断文件和文件夹是否存在、创建文件夹

陈磊@Criss

Git删除仓库中的文件和文件夹

陈磊@Criss

Docker的Image

陈磊@Criss

如何选择一个性能测试工具(LoadRunner和Locust的一次对比)

陈磊@Criss

Kafka实战宝典:如何跨机房传输数据

数据社

大数据 kafka 跨机房

快速掌握的测试用例优先级划分方法

陈磊@Criss

人人都可以掌握的正交试验设计测试用例方法

陈磊@Criss

告别下载速度慢!Docker配置阿里云镜像仓库

程序员的时光

Docker 阿里云

该了解一波了!零基础入门Nginx

程序员的时光

nginx Docker

Java的Override和Overload

陈磊@Criss

Git使用教程:最详细、最傻瓜、最浅显、真正手把手教!

程序员生活志

git

芯片行业现状:机遇与泡沫

芯片行业现状:机遇与泡沫

Serverless实践系列(四):网站监控脚本的实现-InfoQ