詳解Python實現(xiàn)URL監(jiān)測與即時推送
原理
采用Python requests發(fā)起請求監(jiān)測的URL,檢測Http響應(yīng)狀態(tài)及是否超時,如果Http狀態(tài)異?;蝽憫?yīng)超時,則通過聚合云推的消息推送API將預(yù)警消息發(fā)送至郵箱、釘釘機器人、企業(yè)微信機器人、微信公眾號等,服務(wù)端通過crontab定時(每分鐘)執(zhí)行代碼,實現(xiàn)動態(tài)監(jiān)測功能。
環(huán)境
操作系統(tǒng): CentOS 7.x
Python版本: 3.6
消息推送服務(wù): tui.juhe.cn
代碼
#!/usr/bin/python3
import requests
import time
import json
# 監(jiān)測URL是否正常響應(yīng)
def url_check(url):
# 當(dāng)前時間
check_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
print("開始監(jiān)測:%s -- %s" % (url, check_time))
try:
# 請求URL, 設(shè)置3s超時
r = requests.get(url, timeout=3)
if r.status_code != 200:
# 請求響應(yīng)狀態(tài)異常
msg = "監(jiān)控的URL:%s%sHttp狀態(tài)異常:%s%s監(jiān)測時間:%s" % (url, "\n\n", r.status_code, "\n\n", check_time)
print("監(jiān)測結(jié)果:異常(Http狀態(tài)異常:%s) -- %s" % (r.status_code, check_time))
# 通過云推推送消息
yuntui_push(msg)
else:
# 請求響應(yīng)正常
print("監(jiān)測結(jié)果:正常 -- %s" % check_time)
except requests.exceptions.ConnectTimeout:
# 請求響應(yīng)超時
msg = "監(jiān)控的URL:%s%s請求異常:%s%s監(jiān)測時間:%s" % (url, "\n\n", "請求超時", "\n\n", check_time)
print("監(jiān)測結(jié)果:超時 -- %s" % check_time)
# 通過云推推送消息
yuntui_push(msg)
# 將預(yù)警消息通過云推推送
def yuntui_push(content):
# 當(dāng)前時間
push_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
# 云推接口的信息配置,可以通過 https://tui.juhe.cn 自行注冊創(chuàng)建
# (可以配置郵件、釘釘機器人、微信公眾號等接收方式)
token = "*****************"
service_id = "******"
title = "URL可用性監(jiān)控預(yù)警"
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("推送結(jié)果:成功 -- %s" % push_time)
else:
print("推送結(jié)果:失?。?s) -- %s" % (push_res['reason'], push_time))
except requests.exceptions.ConnectTimeout:
print("推送結(jié)果:超時 -- %s" % push_time)
# 執(zhí)行URL可用性監(jiān)測
if __name__ == '__main__':
# 監(jiān)控URL可用性
# url_check("https://www.test.com")
url_check("https://www.baidu.com/")
如果requests未安裝可以執(zhí)行以下命令安裝
pip3 install requests
crontab計劃任務(wù)配置
命令行輸入crontab -e進(jìn)入計劃任務(wù)配置
# 每分鐘執(zhí)行一次 */1 * * * * /usr/bin/python3 /data/check_url/main.py >> /data/log.txt
查看日志
cat /data/log.txt
開始監(jiān)測:https://www.baidu.com/ -- 2021-11-16 15:04:01 監(jiān)測結(jié)果:正常 -- 2021-11-16 15:04:01 開始監(jiān)測:https://www.baidu.com/ -- 2021-11-16 15:05:02 監(jiān)測結(jié)果:正常 -- 2021-11-16 15:05:02 開始監(jiān)測:https://www.baidu.com/ -- 2021-11-16 15:06:01 監(jiān)測結(jié)果:正常 -- 2021-11-16 15:06:01 開始監(jiān)測:https://www.baidu.com/ -- 2021-11-16 15:07:01 監(jiān)測結(jié)果:正常 -- 2021-11-16 15:07:01 開始監(jiān)測:https://www.baidu.com/ -- 2021-11-16 15:08:01 監(jiān)測結(jié)果:正常 -- 2021-11-16 15:08:01 開始監(jiān)測:https://www.test.com -- 2021-11-16 15:11:01 監(jiān)測結(jié)果:超時 -- 2021-11-16 15:11:01 推送結(jié)果:成功 -- 2021-11-16 15:11:04 開始監(jiān)測:https://www.test.com -- 2021-11-16 15:12:01 監(jiān)測結(jié)果:超時 -- 2021-11-16 15:12:01 推送結(jié)果:成功 -- 2021-11-16 15:12:04
預(yù)警消息效果
如果監(jiān)測到異常結(jié)果,你在云推配置的接收終端將會收到通知,類似如下:
釘釘群機器人:

郵件:

微信公眾號:

總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
python使用gTTS實現(xiàn)文本轉(zhuǎn)語音功能
gTTS(Google?Text-to-Speech),?這個庫是Google的Text-to-Speech?API的一個接口,提供了一種簡單的方式來生成聽起來自然的語言,下面我們就來看看如何使用gTTS實現(xiàn)文本轉(zhuǎn)語音功能吧2024-03-03
如何將python中的List轉(zhuǎn)化成dictionary
這篇文章主要介紹在python中如何將list轉(zhuǎn)化成dictionary,通過提出兩個問題來告訴大家如何解決,有需要的可以參考借鑒。2016-08-08
實現(xiàn)Windows下設(shè)置定時任務(wù)來運行python腳本
這篇文章主要介紹了實現(xiàn)Windows下設(shè)置定時任務(wù)來運行python腳本的完整過程,有需要的朋友可以借鑒參考下,希望對廣大讀者朋友能夠有所幫助2021-09-09
pycharm軟件實現(xiàn)設(shè)置自動保存操作
這篇文章主要介紹了pycharm軟件實現(xiàn)設(shè)置自動保存操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06
python基礎(chǔ)之while循環(huán)、for循環(huán)詳解及舉例
所謂循環(huán)結(jié)構(gòu)就是程序中控制某條或某些指令重復(fù)執(zhí)行的結(jié)構(gòu),下面這篇文章主要給大家介紹了關(guān)于python基礎(chǔ)之while循環(huán)、for循環(huán)的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-04-04

