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 相关文章推荐
本地文件上传到七牛云服务器示例(七牛云存储)
Jan 11 Python
Python学习笔记(二)基础语法
Jun 06 Python
Python StringIO模块实现在内存缓冲区中读写数据
Apr 08 Python
Python使用matplotlib实现在坐标系中画一个矩形的方法
May 20 Python
Python实现大文件排序的方法
Jul 10 Python
Python使用multiprocessing实现一个最简单的分布式作业调度系统
Mar 14 Python
python魔法方法-属性访问控制详解
Jul 25 Python
python自动发邮件库yagmail的示例代码
Feb 23 Python
Python读取Word(.docx)正文信息的方法
Mar 15 Python
pyqt5实现俄罗斯方块游戏
Jan 11 Python
python-OpenCV 实现将数组转换成灰度图和彩图
Jan 09 Python
python 使用递归回溯完美解决八皇后的问题
Feb 26 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字符串截取中文截取2,单字节截取模式
2007/12/10 PHP
Prototype使用指南之hash.js
2007/01/10 Javascript
javascript实现动态CSS换肤技术的脚本
2007/06/29 Javascript
js 页面执行时间计算代码
2009/03/04 Javascript
深入理解Javascript里的依赖注入
2014/03/19 Javascript
JavaScript入门教程之引用类型
2016/05/04 Javascript
arcgis for js 修改infowindow样式的方法
2016/11/02 Javascript
jQuery常见的选择器及用法介绍
2016/12/20 Javascript
详解vue express启动数据服务
2017/07/05 Javascript
VueJs 搭建Axios接口请求工具
2017/11/20 Javascript
mui back 返回刷新页面的实例
2017/12/06 Javascript
jQuery发请求传输中文参数乱码问题的解决方案
2018/05/22 jQuery
关于React动态加载路由处理的相关问题
2019/01/07 Javascript
vue基础之事件简写、事件对象、冒泡、默认行为、键盘事件实例分析
2019/03/11 Javascript
mpvue小程序循环动画开启暂停的实现方法
2019/05/15 Javascript
layui清空,重置表单数据的实例
2019/09/12 Javascript
[50:48]LGD vs CHAOS 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
Python 3中的yield from语法详解
2017/01/18 Python
Python中矩阵库Numpy基本操作详解
2017/11/21 Python
轻松实现TensorFlow微信跳一跳的AI
2018/01/05 Python
微信跳一跳游戏python脚本
2020/04/01 Python
Python的numpy库下的几个小函数的用法(小结)
2019/07/12 Python
Python Web框架之Django框架cookie和session用法分析
2019/08/16 Python
基于Python编写一个计算器程序,实现简单的加减乘除和取余二元运算
2020/08/05 Python
plt.figure()参数使用详解及运行演示
2021/01/08 Python
python 使用OpenCV进行简单的人像分割与合成
2021/02/02 Python
Vans澳大利亚官网:购买鞋子、服装及配件
2019/09/05 全球购物
师范生教师实习自我鉴定
2013/09/27 职场文书
物理教师自荐信范文
2013/12/28 职场文书
护理毕业生自我鉴定
2014/02/11 职场文书
高中校园广播稿3篇
2014/09/29 职场文书
2014年客服工作总结与计划
2014/12/09 职场文书
搬迁通知
2015/04/20 职场文书
给原生html中添加水印遮罩层的实现示例
2021/04/02 Javascript
PHP实现创建以太坊钱包转账等功能
2021/04/21 PHP
python前后端自定义分页器
2022/04/13 Python