详解Python实现URL监测与即时推送

作者:董式小爬虫 时间:2023-12-29 08:18:35 

原理

采用Python requests发起请求监测的URL,检测Http响应状态及是否超时,如果Http状态异常或响应超时,则通过聚合云推的消息推送API将预警消息发送至邮箱、钉钉机器人、企业微信机器人、微信公众号等,服务端通过crontab定时(每分钟)执行代码,实现动态监测功能。

环境

操作系统: CentOS 7.x

Python版本: 3.6

消息推送服务: tui.juhe.cn

代码


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

# 监测URL是否正常响应
def url_check(url):
   # 当前时间
   check_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
   print("开始监测:%s -- %s" % (url, check_time))
   try:
       # 请求URL, 设置3s超时
       r = requests.get(url, timeout=3)
       if r.status_code != 200:
           # 请求响应状态异常
           msg = "监控的URL:%s%sHttp状态异常:%s%s监测时间:%s" % (url, "\n\n", r.status_code, "\n\n", check_time)
           print("监测结果:异常(Http状态异常:%s) -- %s" % (r.status_code, check_time))
           # 通过云推推送消息
           yuntui_push(msg)
       else:
           # 请求响应正常
           print("监测结果:正常 -- %s" % check_time)
   except requests.exceptions.ConnectTimeout:
       # 请求响应超时
       msg = "监控的URL:%s%s请求异常:%s%s监测时间:%s" % (url, "\n\n", "请求超时", "\n\n", check_time)
       print("监测结果:超时 -- %s" % check_time)
       # 通过云推推送消息
       yuntui_push(msg)

# 将预警消息通过云推推送
def yuntui_push(content):
   # 当前时间
   push_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
   # 云推接口的信息配置,可以通过 https://tui.juhe.cn 自行注册创建
   # (可以配置邮件、钉钉机器人、微信公众号等接收方式)
   token = "*****************"
   service_id = "******"
   title = "URL可用性监控预警"
   doc_type = "markdown"
   body = {"token": token, "service_id": service_id, "title": title, "content": content, "doc_type": doc_type}
   try:
       r = requests.post("https://tui.juhe.cn/api/plus/pushApi", data=body, timeout=15)
       push_res = json.loads(r.content)
       code = push_res['code']
       if code == 200:
           print("推送结果:成功 -- %s" % push_time)
       else:
           print("推送结果:失败(%s) -- %s" % (push_res['reason'], push_time))
   except requests.exceptions.ConnectTimeout:
       print("推送结果:超时 -- %s" % push_time)

# 执行URL可用性监测
if __name__ == '__main__':
   # 监控URL可用性
   # url_check("https://www.test.com")
   url_check("https://www.baidu.com/")

如果requests未安装可以执行以下命令安装


pip3 install requests

crontab计划任务配置

命令行输入crontab -e进入计划任务配置


# 每分钟执行一次
*/1 * * * * /usr/bin/python3 /data/check_url/main.py >> /data/log.txt

查看日志


cat /data/log.txt

开始监测:https://www.baidu.com/ -- 2021-11-16 15:04:01
监测结果:正常 -- 2021-11-16 15:04:01
开始监测:https://www.baidu.com/ -- 2021-11-16 15:05:02
监测结果:正常 -- 2021-11-16 15:05:02
开始监测:https://www.baidu.com/ -- 2021-11-16 15:06:01
监测结果:正常 -- 2021-11-16 15:06:01
开始监测:https://www.baidu.com/ -- 2021-11-16 15:07:01
监测结果:正常 -- 2021-11-16 15:07:01
开始监测:https://www.baidu.com/ -- 2021-11-16 15:08:01
监测结果:正常 -- 2021-11-16 15:08:01
开始监测:https://www.test.com -- 2021-11-16 15:11:01
监测结果:超时 -- 2021-11-16 15:11:01
推送结果:成功 -- 2021-11-16 15:11:04
开始监测:https://www.test.com -- 2021-11-16 15:12:01
监测结果:超时 -- 2021-11-16 15:12:01
推送结果:成功 -- 2021-11-16 15:12:04

预警消息效果

如果监测到异常结果,你在云推配置的接收终端将会收到通知,类似如下:

钉钉群机器人:

详解Python实现URL监测与即时推送

邮件:

详解Python实现URL监测与即时推送

微信公众号:

详解Python实现URL监测与即时推送

来源:https://blog.csdn.net/chasiona/article/details/121362182

标签:Python,URL,监测,即时推送
0
投稿

猜你喜欢

  • Python3 常用数据标准化方法详解

    2022-08-02 01:51:31
  • 实例解析:MySQL 实例管理器识别的命令

    2009-02-23 17:33:00
  • 五种提高 SQL 性能的方法

    2008-05-16 10:40:00
  • OpenCV中Canny边缘检测的实现

    2022-10-17 10:10:19
  • Python 异常处理Ⅳ过程图解

    2023-06-28 16:05:53
  • Python实现注册登录系统

    2021-10-21 20:01:05
  • Python 深入了解opencv图像分割算法

    2021-11-30 09:42:00
  • Python实现名片管理系统

    2022-01-11 21:45:12
  • 分类与类型的问题

    2008-09-12 13:10:00
  • Python Flask 实现 HTML 文件压缩案例代码(9 级压缩)

    2021-05-22 15:22:13
  • Js sort排序使用方法

    2023-10-19 10:20:55
  • pandas中read_csv、rolling、expanding用法详解

    2022-03-01 06:09:30
  • Python数据可视化常用4大绘图库原理详解

    2023-08-25 11:12:09
  • 利用types增强vscode中js代码提示功能详解

    2023-07-15 05:57:08
  • Pycharm中的Python Console用法解读

    2021-02-20 06:27:36
  • Python虚拟环境库virtualenvwrapper安装及使用

    2023-12-28 22:11:53
  • Python爬虫之爬取我爱我家二手房数据

    2023-08-11 01:35:06
  • python在控制台输出进度条的方法

    2022-01-12 09:27:15
  • 详解MySQL 数据库优化方法

    2010-08-12 14:50:00
  • Python面向对象程序设计之类的定义与继承简单示例

    2022-03-24 03:00:16
  • asp之家 网络编程 m.aspxhome.com