Serverless實踐系列(四):網站監控腳本的實現

很多開發者都有自己的博客,或者做過Web,但是自己關心的Web是否健康?當前狀態是否可訪問?網站掛了誰的鍋?這些問題都可以用相關的網站監控腳本進行監測。今天本文將分享如何通過雲函數開發一個簡單的腳本,進行網站監控。

基本監控腳本

假如說,目前想要監控的網站是https://www.anycodes.cn,想知道這個網站是否可用,那麼可以通過Python語言編寫一個腳本,來查看這個網站的狀態,獲取他的http_status_code,如果該數值爲200,則說明網站可用,如果非200,則說明網站不可用。

首先,打開騰訊雲登陸並選擇雲函數業務,創建監控腳本:

寫代碼:

# -*- coding: utf8 -*-
import json
import 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 ssl
import json
import smtplib
import urllib.request
from email.mime.text import MIMEText
from email.header import Header

ssl._create_default_https_context = ssl._create_unverified_context

def sendEmail(content, to_user):
    sender = '[email protected]'
    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('[email protected]', '密碼')
        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), "[email protected]")

點擊測試查看結果:

此時,手機上面接收到了提醒:

爲我們是要監控網站不可訪問的狀態,所以修改一下判斷:

修改完成之後,就可以保存了。考慮到這個腳本需要每隔一段時間都要觸發一次,因此可以設置一個定時觸發。

觸發方式裏面增加定時觸發,並且保存即可,同時點擊右上角的發佈新版本:

這時,網站狀態監控就已經上線。

升級監控腳本

有人說了,這樣簡單的一個腳本,意義大麼?個人感覺意義很大,因爲這個腳本,只是拋磚引玉,還有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.request
import 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.request
import urllib.parse
import re
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'
    }

    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 ssl
import json
import re
import socket
import smtplib
import urllib.request
from email.mime.text import MIMEText
from 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 = '[email protected]'
    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('[email protected]', '密碼')
        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), "[email protected]")
    final_status,final_list = getWebTime()
    if final_status:
        sendEmail("您的網站%s的狀態:<br>%s" % (url, "<br>".join(final_list)), "[email protected]")
    else:
        sendEmail("您的網站%s的狀態:<br>%s" % (url, "<br>".join(final_list)), "[email protected]")

由於這個程序,可能運行的時間有點長,所以需要對雲函數的timeout進行修改:

修改之後,可以測試和部署一下:

然後,可以部署到線上。

當然,這裏可能還有一些小問題,那就是,很可能某些測試節點出問題,導致網站無法訪問,所以這個告警機制可以重新編排一下:
當n個節點出現問題,再進行告警:

# -*- coding: utf8 -*-
import ssl
import json
import re
import socket
import smtplib
import urllib.request
from email.mime.text import MIMEText
from 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 = '[email protected]'
    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('[email protected]', '密碼')
        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), "[email protected]")
    final_status,final_list = getWebTime()
    if final_status:
        sendEmail("您的網站%s的狀態:<br>%s" % (url, "<br>".join(final_list)), "[email protected]")
    else:
        sendEmail("您的網站%s的狀態:<br>%s" % (url, "<br>".join(final_list)), "[email protected]")



main_handler(None,None)

靈感啓發:PPPlus版本

可能有時候不是監控自己的網站,而是要監控別人網站的某些行爲,例如某個小說是否更新了,某個視頻是否更新了,某個產品是否發佈了,某個成績是否出來… 其實這些情景都可以用騰訊雲的函數計算來開發,非常簡單方便。

作者介紹:

劉宇,騰訊雲Serverless團隊後臺研發工程師。畢業於浙江大學,先後參與騰訊云云函數產品研發、自動擴縮容、CLI等模塊建設以及社區相關工作。本文轉載自微信公衆號 ServerlessCloudNative(ID:ServerlessGo)

《Serverless 實踐系列(一):如何通過 SCF 與自然語言處理爲網站賦能》
《Serverless 實踐系列(二):爲 Python 雲函數打包依賴》
《Serverless 實踐系列(三):突破傳統 OJ 瓶頸,“判題姬”接入雲函數》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章