0基础上手python编程,实践URL监控+企业微信机器人告警

liftword5个月前 (01-31)技术文章106

全民制作人大家好,我是学习python两天半的练习生王忘杰,喜欢路由交换、linux、网络安全,开整!这是我的第二篇0基础python文章,请大家支持,谢谢~

开发思路
用于监控指定的URL,在我的场景中,我是从腾讯VPS上监控公司宽带出口,当URL访问超时时,即为宽带故障。
设计思路很简单,访问失败发送告警,访问成功发送恢复通知,同时要使用配置文件进行配置,防止持续重复告警。

绘制开发流程图

使用python语言实现

#!/usr/bin/python3
import requests
import time
import json
import os


# 监测URL是否正常响应
def url_check(url):
    # 当前时间
    check_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
    try:
        # 请求URL, 设置3s超时, 忽略SSL证书
        r = requests.get(url, timeout=3, verify=False)
        if r.status_code == 200:
            fo = open(config,"r")
            line = fo.read(1)
            print(line)
            #判断配置文件内容
            if line == "1":
                print("发送报警")
                fo.close()
                fo = open(config, "w")
                fo.write('0')
                print("配置重置为0")
                # 请求响应状态
                msg = "监控的URL:%s%sURL恢复状态正常:%s%s监测时间:%s" % (
                url, "\n\n", r.status_code, "\n\n", check_time)
                # 推送消息
                yun_push(msg)
            else:
                print("当前配置为",line)
                fo = open(config, "w")
                fo.write('0')
                print("配置重置为0")
        else:
            fo = open(config, "r")
            line = fo.read(1)
            print(line)
            if line == "1":
                print("退出程序")
            else:
                print("发送报警")
                fo.close()
                fo = open(config, "w")
                fo.write('1')
                print("配置重置为1")
                # 请求响应状态
                msg = "监控的URL:%s%sURL访问异常:%s%s监测时间:%s" % (
                    url, "\n\n", r.status_code, "\n\n", check_time)
                # 推送消息
                yun_push(msg)
    except:
        fo = open(config, "r")
        line = fo.read(1)
        print(line)
        if line == "1":
            print("退出程序")
        else:
            print("发送报警")
            fo.close()
            fo = open(config, "w")
            fo.write('1')
            print("配置重置为1")
            # 请求响应状态
            msg = "监控的URL:%s%sURL访问失败,无法连接%s监测时间:%s" % (
                url, "\n\n", "\n\n", check_time)
            # 推送消息
            yun_push(msg)

def yun_push(content):
    url = 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=用自己的'
    s = json.dumps({'msgtype': 'text', 'text': {"content" : content}})
    print(requests.post(url, data=s).text)

if __name__ == '__main__':
    #判断配置文件是否存在,不存在则生成配置文件并退出,配置文件则存在执行
    config = './baidu.config'
    if not os.path.exists(config):
        print("配置文件不存在")
        file = open(config,'w')
        file.close()
        print("配置文件已生成")
    else:
        print("配置文件存在,执行URL检测")
        url_check("https://www.baidu.com/")

运行效果

正式使用
在VPS部署python脚本,并设置定时任务即可

相关文章

作为996社畜,如何自学Python?一文讲清楚

作为996社畜,应该如何自学Python?今天就给大家分享一下,工作之余,应该如何学习Python?1. 明确目标对于零基础的学员而言,要明确你学习Python仅仅是为了满足好奇心?还是有工作需要,比...

我用python实现了一个量化选股程序

背景近期在学习数据分析,在课程最后老师讲了一下通过量化分析选择股票的案例,感觉挺有意思的,恰好周围也有人在炒股票,干脆自己做一个软件来实践一下学到的知识。课程上主要用python相关库来处理比特币的数...

小白学习《python编程从入门到实践》,需要注意的点

相信很多人学习python语言,接触的第一本是《python编程入门到实践》,那么结合自身的学习过程,给大家分享一下,这本书该如何学习:这本书一共包含两个部分,基础知识和项目实战。基础知识项目基础知识...

挪威科技大学教授用10年心血编写的python教程,你确定不拿走?

拥有20多年黑客经验的挪威科技大学教授用10年心血精心编写的python教程,你确定不拿走吗?Magnus Lie Hetland是一个资深的黑客,同时他还担任挪威科技大学的教授,负责教授算法,这次介...

学好了Python,我们可以实现很多算法了

Python因其简洁性和强大的库支持,成为实现各种算法的理想选择。下面我将概述一些常见算法在Python中的实现方式:1. **排序算法**: - **冒泡排序**:通过重复遍历要排序的列表,比较相邻...

如何帮助孩子高效学习Python:开源硬件实践是最优选择

家长们常常担心孩子在学习Python时所面临的挑战,如复杂性、兴趣保持、学习进度和可用资源。对于希望有效教授孩子Python的家长而言,了解硬件的作用至关重要,因为结合硬件项目的Python学习能够显...