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 相关文章推荐
Python3.x版本中新的字符串格式化方法
Apr 24 Python
Python网络编程中urllib2模块的用法总结
Jul 12 Python
使用python将大量数据导出到Excel中的小技巧分享
Jun 14 Python
pandas每次多Sheet写入文件的方法
Dec 10 Python
在Python中关于使用os模块遍历目录的实现方法
Jan 03 Python
Python3.4学习笔记之类型判断,异常处理,终止程序操作小结
Mar 01 Python
Python split() 函数拆分字符串将字符串转化为列的方法
Jul 16 Python
flask框架路由常用定义方式总结
Jul 23 Python
python模块导入的方法
Oct 24 Python
浅谈Python中re.match()和re.search()的使用及区别
Apr 14 Python
PyInstaller运行原理及常用操作详解
Jun 13 Python
关于python中remove的一些坑小结
Jan 04 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图片处理类(水印、等比缩放、固定高宽)分享
2015/06/19 PHP
详解PHP实现执行定时任务
2015/12/21 PHP
一个javascript图片阅览组件
2010/11/09 Javascript
js防止表单重复提交实现代码
2012/09/05 Javascript
jquery属性选择器not has怎么写 行悬停高亮显示
2013/11/13 Javascript
在React框架中实现一些AngularJS中ng指令的例子
2016/03/06 Javascript
ECMAScript6--解构
2017/03/30 Javascript
JavaScript实现简单生成随机颜色的方法
2017/09/21 Javascript
nodejs读取并去重excel文件
2018/04/22 NodeJs
详解webpack4升级指南以及从webpack3.x迁移
2018/06/12 Javascript
在vue中获取token,并将token写进header的方法
2018/09/26 Javascript
js中的this的指向问题详解
2019/08/29 Javascript
小程序使用watch监听数据变化的方法详解
2019/09/20 Javascript
vuejs+element UI table表格中实现禁用部分复选框的方法
2019/09/20 Javascript
Node.js fs模块原理及常见用途
2020/10/22 Javascript
Python基础语法(Python基础知识点)
2016/02/28 Python
Python虚拟环境项目实例
2017/11/20 Python
Python3 操作符重载方法示例
2017/11/23 Python
Python 中Pickle库的使用详解
2018/02/24 Python
基于Django框架利用Ajax实现点赞功能实例代码
2018/08/19 Python
浅谈Python程序的错误:变量未定义
2020/06/02 Python
如何学习Python time模块
2020/06/03 Python
唤醒头发毛囊的秘密武器:Grow Gorgeous
2016/08/28 全球购物
选购国际女性时装设计师品牌:IFCHIC(支持中文)
2018/04/12 全球购物
Yahoo的PHP面试题
2014/05/26 面试题
网络事业创业计划书范文
2014/01/09 职场文书
缓刑人员的思想汇报
2014/01/11 职场文书
怎么写好自荐书
2014/03/02 职场文书
2014年党的群众路线教育实践活动总结
2014/04/25 职场文书
三八妇女节演讲稿
2014/05/27 职场文书
秋季运动会广播稿(30篇)
2014/09/13 职场文书
作文评语怎么写
2014/12/25 职场文书
房屋维修申请报告
2015/05/18 职场文书
人民检察院起诉书
2015/05/20 职场文书
2015年物业公司保洁工作总结
2015/10/22 职场文书
《云雀的心愿》教学反思
2016/02/23 职场文书