原理
采用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
預警消息效果
如果監測到異常結果,你在云推配置的接收終端將會收到通知,類似如下:
釘釘群機器人:
郵件:
微信公眾號:
總結
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注服務器之家的更多內容!
原文鏈接:https://blog.csdn.net/chasiona/article/details/121362182