Python3监控windows,linux系统的CPU、硬盘、内存使用率和各个端口的开启情况详细代码实例


Posted in Python onMarch 18, 2020

由于项目的需要,需要做一个简单监控服务器的CPU利用率、CPU负载、硬盘使用率、内存利用率和服务器的各个端口的开启情况的程序,并把结果通知到监控平台,如果出现异常,监控平台打电话或者发短信通知给具体的运维人员

python版本要求:python3.0 以上

安装 python 的 psutil 包 和 requests 包

pip install psutil

pip install requests

Linux系统下运行效果

Python3监控windows,linux系统的CPU、硬盘、内存使用率和各个端口的开启情况详细代码实例

Windows系统下运行效果

Python3监控windows,linux系统的CPU、硬盘、内存使用率和各个端口的开启情况详细代码实例

代码实例核心程序

# 获取端口信息
	@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_id=test@mucfc.com,11223344@qq.com

启动方式

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

注:需要定期清理 monitor.log 文件

本文主要实例了Python3监控windows,linux系统的CPU、硬盘、内存使用率和各个端口的开启情况详细代码实例,更多关于Python3监控实例与技巧请查看下面的相关链接

Python 相关文章推荐
windows系统中python使用rar命令压缩多个文件夹示例
May 06 Python
python中bisect模块用法实例
Sep 25 Python
用Python从零实现贝叶斯分类器的机器学习的教程
Mar 31 Python
详解Django之admin组件的使用和源码剖析
May 04 Python
解决Python print 输出文本显示 gbk 编码错误问题
Jul 13 Python
python并发和异步编程实例
Nov 15 Python
Python二叉树的遍历操作示例【前序遍历,中序遍历,后序遍历,层序遍历】
Dec 24 Python
用Cython加速Python到“起飞”(推荐)
Aug 01 Python
Python Django 封装分页成通用的模块详解
Aug 21 Python
Python读取excel文件中带公式的值的实现
Apr 17 Python
如何使用Python自动生成报表并以邮件发送
Oct 15 Python
学会迭代器设计模式,帮你大幅提升python性能
Jan 03 Python
PyTorch加载自己的数据集实例详解
Mar 18 #Python
Python进程间通信multiprocess代码实例
Mar 18 #Python
python实现超级玛丽游戏
Mar 18 #Python
python实现超级马里奥
Mar 18 #Python
Python开发企业微信机器人每天定时发消息实例
Mar 17 #Python
10个python3常用排序算法详细说明与实例(快速排序,冒泡排序,桶排序,基数排序,堆排序,希尔排序,归并排序,计数排序)
Mar 17 #Python
Python Selenium安装及环境配置的实现
Mar 17 #Python
You might like
第三章 php操作符与控制结构代码
2011/12/30 PHP
基于php socket(fsockopen)的应用实例分析
2013/06/02 PHP
PHP限制HTML内容中图片必须是本站的方法
2015/06/16 PHP
PHP实现事件机制实例分析
2015/06/26 PHP
PHP时间类完整实例(非常实用)
2015/12/25 PHP
PHP简单处理表单输入的特殊字符的方法
2016/02/03 PHP
PHP实现的网站目录扫描索引工具
2016/09/08 PHP
jquery实现metro效果示例代码
2013/09/06 Javascript
javascript垃圾收集机制与内存泄漏详细解析
2013/11/11 Javascript
js处理自己不能定义二维数组的方法详解
2014/03/03 Javascript
关于Javascript加载执行优化的研究报告
2014/12/16 Javascript
JavaScript如何禁止Backspace键
2015/12/02 Javascript
vue多级多选菜单组件开发
2020/09/08 Javascript
浅析js的模块化编写 require.js
2016/12/07 Javascript
canvas实现流星雨的背景效果
2017/01/13 Javascript
Angular.JS中指令ng-if、ng-show/ng-hide和ng-switch的使用教程
2017/05/07 Javascript
如何制作一个Node命令行图像识别工具
2018/12/12 Javascript
React优化子组件render的使用
2019/05/12 Javascript
python迭代器的使用方法实例
2013/11/21 Python
Django的URLconf中使用缺省视图参数的方法
2015/07/18 Python
python调用fortran模块
2016/04/08 Python
python爬虫获取淘宝天猫商品详细参数
2020/06/23 Python
Python玩转加密的技巧【推荐】
2019/05/13 Python
python sorted方法和列表使用解析
2019/11/18 Python
PyQt5+Pycharm安装和配置图文教程详解
2020/03/24 Python
用python给csv里的数据排序的具体代码
2020/07/17 Python
巴西网上药房:onofre
2016/11/21 全球购物
prAna官网:瑜伽、旅行和冒险服装
2019/03/10 全球购物
捷克购买家具网站:JENA nábytek
2020/03/19 全球购物
正宗的澳大利亚Ugg靴子零售商:UGG Express
2020/04/19 全球购物
请解释virtual关键字的含义
2015/06/17 面试题
什么是Remote Module
2016/06/10 面试题
客服实习的个人自我鉴定
2013/10/20 职场文书
高中课程设置方案
2014/05/28 职场文书
2014年打非治违工作总结
2014/11/13 职场文书
2014年社区民政工作总结
2014/12/02 职场文书