AICon 上海站|日程100%上线,解锁Al未来! 了解详情
写点什么

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

  • 2019-08-16
  • 本文字数:17708 字

    阅读完需:约 58 分钟

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-08-16 15:3519666

评论

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

你应该了解的MySQL锁分类

X先生

MySQL 数据库 sql 数据库优化

克隆虚拟机

yuanhang

架构师训练营第十三周作业

Hanson

限量版Netty纯手打笔记,年薪80W架构师耗时1个月整理出

Java架构师迁哥

开源流数据公司 StreamNative 正式加入 CNCF,积极推动云原生策略发展

Apache Pulsar

云原生 pulsar Apache Pulsar 消息系统 消息中间件

全票通过!易观开源项目DolphinScheduler进入Apache孵化器

易观大数据

大专生拿到阿里offer,却担心背调不过,网友:985在你面前黯淡无光

程序员生活志

面试 职场 阿里

字节小组长无意中得知整个部门的薪资,自己28K,手下却有35K,怎么办?

程序员生活志

字节跳动 职场 薪资

「查缺补漏」巩固你的RocketMQ知识体系

Kerwin

Java RocketMQ

对PageRank的理解

2流程序员

抗疫代码入国家博物馆, 程序员的巅峰时刻!

程序员生活志

程序员

oeasy 教您玩转linux 之010208 满屏乱码 bb

o

防止APP窃取用户隐私问题,OPPO安全在行动

OPPO安全

App 安全 隐私保护 数据隐私 sdk

​程序员离职后收到原公司 2400 元,被告违反竞业协议赔 18 万

程序员生活志

程序员 职场

架构师训练营第十三周总结

Hanson

如何在一台电脑上管理多Github账号

Matrix Chan

git GitHub 版本管理工具 开发日志

从零开始搭建完整的电影全栈系统(一)——数据库设计及爬虫编写

刘强西

爬虫 Scrapy

解Bug之路-Nginx 502 Bad Gateway

无毁的湖光

nginx Linux TCP

大数据

yuanhang

Centos 7 虚拟机

超级TV盒子,超清秒播,解锁全网VIP资源!

程序员生活志

资源

anyRTC小程序SDK 4.0上线

anyRTC开发者

小程序 WebRTC 语音 直播 RTC

anyRTC - 模仿微信音视频通话功能

anyRTC开发者

WebRTC 语音 直播 RTC 安卓

LeetCode题解:225. 用队列实现栈,一个队列, 压入 - O(n), 弹出 - O(1),JavaScript,详细注释

Lee Chen

大前端 LeetCode

为什么一个还没毕业的大学生能够把 IO 讲的这么好?

苹果看辽宁体育

Java 后端 io

架构师0期Week13作业

Nan Jiang

PageRank 算法

周冬辉

如何在企业微信上搭建一款活动报名 App

Ceelog

企业微信 Go 语言

Fettley全球共识共享智能合约资产计划 掀起行业追捧热潮

InfoQ_967a83c6d0d7

Redis单线程为什么能做到高性能和io多路复用它是个什么鬼

Java架构师迁哥

干货来袭!20例JavaWeb项目开发精粹;(内含源码)

Java架构师迁哥

超详细:完整的推荐系统架构设计

博文视点Broadview

架构 算法 推荐系统

Serverless实践系列(四):网站监控脚本的实现_语言 & 开发_刘宇_InfoQ精选文章