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 相关文章推荐
基于python中的TCP及UDP(详解)
Nov 06 Python
对Tensorflow中权值和feature map的可视化详解
Jun 14 Python
解决pycharm运行时interpreter为空的问题
Oct 29 Python
使用 Visual Studio Code(VSCode)搭建简单的Python+Django开发环境的方法步骤
Dec 17 Python
python-itchat 统计微信群、好友数量,及原始消息数据的实例
Feb 21 Python
Python程序包的构建和发布过程示例详解
Jun 09 Python
python+opencv实现车牌定位功能(实例代码)
Dec 24 Python
Python双链表原理与实现方法详解
Feb 22 Python
关于Python字符串显示u...的解决方式
Mar 06 Python
VS2019+python3.7+opencv4.1+tensorflow1.13配置详解
Apr 16 Python
keras 简单 lstm实例(基于one-hot编码)
Jul 02 Python
python神经网络ResNet50模型
May 06 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 a simple smtp class
2007/11/26 PHP
PHP实现视频文件上传完整实例
2014/08/28 PHP
VPS中使用LNMP安装WordPress教程
2014/12/28 PHP
深入解析WordPress中加载模板的get_template_part函数
2016/01/11 PHP
PHP+jQuery实现双击修改table表格功能示例
2019/02/21 PHP
JavaScript获取GridView选择的行内容
2009/04/14 Javascript
javascript hashtable 修正版 下载
2010/12/30 Javascript
js 三级关联菜单效果实例
2013/08/13 Javascript
jquery showModelDialog的使用方法示例详解
2013/11/19 Javascript
文本域中换行符的替换示例
2014/03/04 Javascript
jquery的clone方法应用于textarea和select的bug修复
2014/06/26 Javascript
javascript中定义类的方法汇总
2014/12/28 Javascript
基于JS组件实现拖动滑块验证功能(代码分享)
2016/11/18 Javascript
jQuery实现删除li节点的方法
2016/12/06 Javascript
js实现华丽的九九乘法表效果
2017/03/29 Javascript
深入理解JS异步编程-Promise
2019/06/03 Javascript
python3.5绘制随机漫步图
2018/08/27 Python
python 实现查找文件并输出满足某一条件的数据项方法
2019/06/12 Python
在python中实现调用可执行文件.exe的3种方法
2019/07/07 Python
提升Python效率之使用循环机制代替递归函数
2019/07/23 Python
python 负数取模运算实例
2020/06/03 Python
matplotlib.pyplot.matshow 矩阵可视化实例
2020/06/16 Python
如何设置PyCharm中的Python代码模版(推荐)
2020/11/20 Python
html5+css3气泡组件的实现
2014/11/21 HTML / CSS
端口镜像是怎么实现的
2014/03/25 面试题
linux面试题参考答案(11)
2012/05/01 面试题
名企HR怎样看待求职信
2014/02/23 职场文书
活动策划求职信模板
2014/04/21 职场文书
网上祭先烈心得体会
2014/09/01 职场文书
个人四风问题对照检查材料
2014/10/01 职场文书
党的群众路线教育实践活动个人剖析材料
2014/10/07 职场文书
幼儿园2014年度工作总结
2014/11/10 职场文书
2015年调度员工作总结
2015/04/30 职场文书
员工辞职信范文大全
2015/05/12 职场文书
2015年为民办实事工作总结
2015/05/26 职场文书
python自动化操作之动态验证码、滑动验证码的降噪和识别
2021/08/30 Python