Python3監控windows,linux系統的CPU、硬碟、記憶體使用率和各個埠的開啟情況詳細程式碼例項
阿新 • • 發佈:2021-01-11
更多程式設計教程請到:菜鳥教程 https://www.piaodoo.com/
友情連結:
高州陽光論壇https://www.hnthzk.com/ 人人影視http://www.sfkyty.com/由於專案的需要,需要做一個簡單監控伺服器的CPU利用率、CPU負載、硬碟使用率、記憶體利用率和伺服器的各個埠的開啟情況的程式,並把結果通知到監控平臺,如果出現異常,監控平臺打電話或者發簡訊通知給具體的運維人員
python版本要求:python3.0 以上
安裝 python 的 psutil 包 和 requests 包
pip install psutil
pip install requests
Linux系統下執行效果
Windows系統下執行效果
程式碼例項核心程式
# 獲取埠資訊 @classmethod def get_ports(cls, port): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) result = sock.connect_ex(('127.0.0.1',int(port))) if result != 0: send_data = cls.g_web_ip+"伺服器的"+port+'埠掛了,快去修復哈' cls.send_msg(send_data) else: print("埠:"+port+"正常")# CPU利用率 @classmethod def get_cpu_used(cls): if (sysstr == "Linux"): f = os.popen("top -bi -n 1| awk '{print $4}'").read().split('\n')[2] float_cpu_used = float(f) float_g_cpu_used = float(cls.g_cpu_used.split("%")[0]) print("CPU利用率:",f,"%") if float(float_cpu_used) > float(float_g_cpu_used): cls.send_msg(cls.g_web_ip+"伺服器的CPU利用率超過"+cls.g_cpu_used+"了,快去看看咋回事!") else: print(sysstr + " CPU Adoption rate Cannot read.") printL() # CPU平均負載 @classmethod def aver_load(cls): if (sysstr == "Linux"): f = os.popen("uptime | sed 's/,//g' | awk '{print $8,$9,$10}'") str_aver_load = f.read().strip().split(":")[1].strip() print("CPU平均負載:",str_aver_load) if float(str_aver_load) > float(cls.g_aver_load): cls.send_msg(cls.g_web_ip+"伺服器的CPU平均負載超過"+cls.g_aver_load+"了,快去看看咋回事!") else: print(sysstr + " CPU Load average Cannot read.") printL() #獲取硬碟使用率 @classmethod def get_disk_used(cls): if (sysstr == "Linux"): disk_val = os.popen("df -h | head -2 | tail -1 |awk '{print $5}'").read().strip() int_disk_val = int(disk_val.split("%")[0]) int_g_disk_val = int(cls.g_disk_used.split("%")[0]) print("硬碟使用率:",disk_val) if int_disk_val > int_g_disk_val: cls.send_msg(cls.g_web_ip+"伺服器的硬碟使用率超過"+cls.g_disk_used+"了,快去看看咋回事!") else: print(sysstr + " hard disk Cannot read.") printL() # 獲取記憶體使用率 @classmethod def get_mem_used(cls): if (sysstr == "Linux"): f = os.popen("free -m |grep Mem |awk '{print $3/$2}'") str_men = f.read().strip() print("記憶體使用率:",str_men) if float(str_men) > float(cls.g_mem_used): cls.send_msg(cls.g_web_ip+"伺服器的記憶體使用率超過"+cls.g_mem_used+"了,快去看看咋回事!") else: print(sysstr + " RAM Cannot read.") printL() #呼叫報警函式 @classmethod def send_msg(cls, content): cls.send_http(content) # 呼叫http介面 @classmethod def send_http(cls,content): printL() print("send_http:",type(content),content) url_total = cls.g_php_url + "?msg=" + content print("url_total:",url_total) rp = requests.get(url_total) print("rp:",rp.text) printL() # 發微信預警訊息 @classmethod def send_wx_alarm(cls,content): post_url = cls.g_wx_url for id in cls.g_wx_id: try: post_data = '{"operSys":"MCS","content":"伺服器監控告警:%s\n%s","phones":"%s"}'%(cls.g_web_ip, content, id) print(post_data) # data = urllib.parse.urlencode(post_data) # data = data.encode('utf-8') req = requests.get(url=post_url,data=post_data) print("send_wx_alarm req:",req,type(req)) result = json.loads(req.text()) print(result) except Exception as e: print("send_wx_alarm:",e) # 發郵件預警訊息 @classmethod def send_email_alarm(cls,content): post_url = cls.g_email_url for id in cls.g_email_id: try: post_data = '{"subject":"%s伺服器監控告警","email":"%s","bccEmail":"","operSys":"LOG","content":"%s"}'%(cls.g_web_ip, id, content) print(post_data) # data = urllib.parse.urlencode(post_data) # data = data.encode('utf-8') req = requests.get(url=post_url,data=post_data) print("send_email_alarm req:",req,type(req)) # req.add_header("Content-Type", "application/x-www-form-urlencoded;charset=utf-8") result = json.loads(req.text()) print(result) except Exception as e: print("send_email_alarm:",e)
例項程式碼配置檔案
# 本機IP地址(這裡之所以不自動獲取是因為有些機器只有內網) web_ip=***
檢測的埠
monitor_ports=3306, 8088, 6004 ,6379
CPU利用率
cpu_used=100%
CPU平均負載
aver_load=1
記憶體使用率
mem_used=0.8
磁碟使用率
disk_used=80%
通知地址
php_url=http://*:/TaskMonitor/action
微信地址
wecaht_url=http://*:/wechat/sendWeChat
微信ID
wecaht_id=123456,13123
email地址
email_url=http://*:
郵件郵箱
[email protected],[email protected]
啟動方式
nohup python3 monitor.py > monitor.log 2>&1 &
注:需要定期清理 monitor.log 檔案
本文主要例項了Python3監控windows,linux系統的CPU、硬碟、記憶體使用率和各個埠的開啟情況詳細程式碼例項,更多關於Python3監控例項與技巧請檢視下面的相關連結