1. 程式人生 > 其它 >Python3監控windows,linux系統的CPU、硬碟、記憶體使用率和各個埠的開啟情況詳細程式碼例項

Python3監控windows,linux系統的CPU、硬碟、記憶體使用率和各個埠的開啟情況詳細程式碼例項

更多程式設計教程請到:菜鳥教程 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/sendEmail

郵件郵箱

[email protected],[email protected]

啟動方式

nohup python3 monitor.py > monitor.log 2>&1 &

注:需要定期清理 monitor.log 檔案

本文的完整例項原始碼在這裡下載

本文主要例項了Python3監控windows,linux系統的CPU、硬碟、記憶體使用率和各個埠的開啟情況詳細程式碼例項,更多關於Python3監控例項與技巧請檢視下面的相關連結