使用云函数+企微机器人部署网站定时监控

449 阅读3分钟

前言

某天数据库意外下线导致网站没法访问,过了好几小时都没发现,直到朋友提醒才知道。 于是乎准备做一个定时检测网站状态的小服务。 想过直接在服务器上部署监控服务,但考虑到“把监控服务部署到监控对象上”还是很不妥,如果服务器挂了监控服务也得挂,那就白折腾了。

所以云函数就成了最优选择,而且腾讯还提供了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可以解决