前言
某天数据库意外下线导致网站没法访问,过了好几小时都没发现,直到朋友提醒才知道。 于是乎准备做一个定时检测网站状态的小服务。 想过直接在服务器上部署监控服务,但考虑到“把监控服务部署到监控对象上”还是很不妥,如果服务器挂了监控服务也得挂,那就白折腾了。
所以云函数就成了最优选择,而且腾讯还提供了3个月的免费试用。
设计
触发方式
云函数使用定时触发,每隔固定时间执行一次。
执行逻辑
访问目标网站,判断返回的HTTP状态码 状态码为200表示一切正常,打印正常信息,函数结束。 状态码非200表示出现问题,打印异常信息,并且通过WebHook给企业微信发送信息。 访问超时表示出现问题,打印异常信息,并且通过WebHook给企业微信发送信息。
源码
# -*- coding: utf8 -*-
import json,requests
import datetime
url = ""
webhook = ""
def send_work_bot(mag):
msgbody = {
"msgtype": "text",
"text": {
"content": mag
}
}
r = requests.post(webhook,json=msgbody)
if r.status_code == 200:
return True
else:
return False
def main_handler(event, context):
now_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
try:
r = requests.get(url)
if r.status_code == 200:
print("["+now_time+"] 网站状态正常")
else:
print("["+now_time+"] 网站状态异常-Code: "+str(r.status_code))
if send_work_bot("["+now_time+"] 网站状态异常\nCode: "+str(r.status_code)):
print("发送通知成功")
else:
print("发送通知失败")
except Exception as e:
print("["+now_time+"] 网站状态异常-Error: "+str(e))
if send_work_bot("["+now_time+"] 网站状态异常\nError: "+str(e)):
print("发送通知成功")
else:
print("发送通知失败")
部署
新建微信机器人,获取WebHook链接
进入企业微信群,新建机器人
给机器人起个名
把生成的WebHook链接复制下来,后面要用
进入云函数控制台,新建函数
注意环境要选择Python3.6,不然会出现问题
把函数代码粘贴到下面的代码框内
url为待监控的链接
webhook为微信机器人推送链接
等待函数新建完成,进入函数页面
测试函数运行情况
滚动到下面(注意鼠标要离开代码框,不然滚动不下去),点击测试,查看函数运行情况
如下为运行成功
微信也成功收到了信息
新建触发
新建一个定时触发,这里选择的是半小时,可以根据你的需要选择更短的时间
完成
至此,部署完成
可能遇到的问题
找不到requests包
没有安装requests包,换python3.6可以解决,python3.6自带requests
安装了requests包却依旧找不到
默认的python3命令是python3.7的,如果你是python3.7以上的当然找不到,因为约等于没装. 换python3.6可以解决,python3.6自带requests
使用python3.7版本,安装了requests也没法用
SSL版本问题,重装指定版本的urllib或者换python3.6可以解决
使用python3.10没法用pip安装requests
pip的问题,要么自己修复下,要么换python3.6可以解决