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

时间:2022-01-11 08:27:57

原理

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

环境

操作系统: CentOS 7.x

Python版本: 3.6

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

代码

  1. #!/usr/bin/python3
  2. import requests
  3. import time
  4. import json
  5.  
  6. # 监测URL是否正常响应
  7. def url_check(url):
  8. # 当前时间
  9. check_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
  10. print("开始监测:%s -- %s" % (url, check_time))
  11. try:
  12. # 请求URL, 设置3s超时
  13. r = requests.get(url, timeout=3)
  14. if r.status_code != 200:
  15. # 请求响应状态异常
  16. msg = "监控的URL:%s%sHttp状态异常:%s%s监测时间:%s" % (url, "\n\n", r.status_code, "\n\n", check_time)
  17. print("监测结果:异常(Http状态异常:%s) -- %s" % (r.status_code, check_time))
  18. # 通过云推推送消息
  19. yuntui_push(msg)
  20. else:
  21. # 请求响应正常
  22. print("监测结果:正常 -- %s" % check_time)
  23. except requests.exceptions.ConnectTimeout:
  24. # 请求响应超时
  25. msg = "监控的URL:%s%s请求异常:%s%s监测时间:%s" % (url, "\n\n", "请求超时", "\n\n", check_time)
  26. print("监测结果:超时 -- %s" % check_time)
  27. # 通过云推推送消息
  28. yuntui_push(msg)
  29.  
  30. # 将预警消息通过云推推送
  31. def yuntui_push(content):
  32. # 当前时间
  33. push_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
  34. # 云推接口的信息配置,可以通过 https://tui.juhe.cn 自行注册创建
  35. # (可以配置邮件、钉钉机器人、微信公众号等接收方式)
  36. token = "*****************"
  37. service_id = "******"
  38. title = "URL可用性监控预警"
  39. doc_type = "markdown"
  40. body = {"token": token, "service_id": service_id, "title": title, "content": content, "doc_type": doc_type}
  41. try:
  42. r = requests.post("https://tui.juhe.cn/api/plus/pushApi", data=body, timeout=15)
  43. push_res = json.loads(r.content)
  44. code = push_res['code']
  45. if code == 200:
  46. print("推送结果:成功 -- %s" % push_time)
  47. else:
  48. print("推送结果:失败(%s) -- %s" % (push_res['reason'], push_time))
  49. except requests.exceptions.ConnectTimeout:
  50. print("推送结果:超时 -- %s" % push_time)
  51.  
  52. # 执行URL可用性监测
  53. if __name__ == '__main__':
  54. # 监控URL可用性
  55. # url_check("https://www.test.com")
  56. url_check("https://www.baidu.com/")

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

  1. pip3 install requests

crontab计划任务配置

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

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

查看日志

  1. cat /data/log.txt
  1. 开始监测:https://www.baidu.com/ -- 2021-11-16 15:04:01
  2. 监测结果:正常 -- 2021-11-16 15:04:01
  3. 开始监测:https://www.baidu.com/ -- 2021-11-16 15:05:02
  4. 监测结果:正常 -- 2021-11-16 15:05:02
  5. 开始监测:https://www.baidu.com/ -- 2021-11-16 15:06:01
  6. 监测结果:正常 -- 2021-11-16 15:06:01
  7. 开始监测:https://www.baidu.com/ -- 2021-11-16 15:07:01
  8. 监测结果:正常 -- 2021-11-16 15:07:01
  9. 开始监测:https://www.baidu.com/ -- 2021-11-16 15:08:01
  10. 监测结果:正常 -- 2021-11-16 15:08:01
  11. 开始监测:https://www.test.com -- 2021-11-16 15:11:01
  12. 监测结果:超时 -- 2021-11-16 15:11:01
  13. 推送结果:成功 -- 2021-11-16 15:11:04
  14. 开始监测:https://www.test.com -- 2021-11-16 15:12:01
  15. 监测结果:超时 -- 2021-11-16 15:12:01
  16. 推送结果:成功 -- 2021-11-16 15:12:04

预警消息效果

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

钉钉群机器人:

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

邮件:

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

微信公众号:

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

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注服务器之家的更多内容!

原文链接:https://blog.csdn.net/chasiona/article/details/121362182