由于项目的需要,需要做一个简单监控服务器的CPU利用率、CPU负载、硬盘使用率、内存利用率和服务器的各个端口的开启情况的程序,并把结果通知到监控平台,如果出现异常,监控平台打电话或者发短信通知给具体的运维人员
python版本要求:python3.0以上
安装python的psutil包和requests包
pipinstallpsutil
pipinstallrequests
Linux系统下运行效果
Windows系统下运行效果
代码实例核心程序
#获取端口信息
@classmethod
defget_ports(cls,port):
sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
result=sock.connect_ex(('127.0.0.1',int(port)))
ifresult!=0:
send_data=cls.g_web_ip+"服务器的"+port+'端口挂了,快去修复哈'
cls.send_msg(send_data)
else:
print("端口:"+port+"正常")
#CPU利用率
@classmethod
defget_cpu_used(cls):
if(sysstr=="Linux"):
f=os.popen("top-bi-n1|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,"%")
iffloat(float_cpu_used)>float(float_g_cpu_used):
cls.send_msg(cls.g_web_ip+"服务器的CPU利用率超过"+cls.g_cpu_used+"了,快去看看咋回事!")
else:
print(sysstr+"CPUAdoptionrateCannotread.")
printL()
#CPU平均负载
@classmethod
defaver_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)
iffloat(str_aver_load)>float(cls.g_aver_load):
cls.send_msg(cls.g_web_ip+"服务器的CPU平均负载超过"+cls.g_aver_load+"了,快去看看咋回事!")
else:
print(sysstr+"CPULoadaverageCannotread.")
printL()
#获取硬盘使用率
@classmethod
defget_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)
ifint_disk_val>int_g_disk_val:
cls.send_msg(cls.g_web_ip+"服务器的硬盘使用率超过"+cls.g_disk_used+"了,快去看看咋回事!")
else:
print(sysstr+"harddiskCannotread.")
printL()
#获取内存使用率
@classmethod
defget_mem_used(cls):
if(sysstr=="Linux"):
f=os.popen("free-m|grepMem|awk'{print$3/$2}'")
str_men=f.read().strip()
print("内存使用率:",str_men)
iffloat(str_men)>float(cls.g_mem_used):
cls.send_msg(cls.g_web_ip+"服务器的内存使用率超过"+cls.g_mem_used+"了,快去看看咋回事!")
else:
print(sysstr+"RAMCannotread.")
printL()
#调用报警函数
@classmethod
defsend_msg(cls,content):
cls.send_http(content)
#调用http接口
@classmethod
defsend_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
defsend_wx_alarm(cls,content):
post_url=cls.g_wx_url
foridincls.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_alarmreq:",req,type(req))
result=json.loads(req.text())
print(result)
exceptExceptionase:
print("send_wx_alarm:",e)
#发邮件预警消息
@classmethod
defsend_email_alarm(cls,content):
post_url=cls.g_email_url
foridincls.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_alarmreq:",req,type(req))
#req.add_header("Content-Type","application/x-www-form-urlencoded;charset=utf-8")
result=json.loads(req.text())
print(result)
exceptExceptionase:
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@,11223344@
启动方式
nohuppython3monitor.py>monitor.log2>&1&
注:需要定期清理monitor.log文件
本文的完整实例源码在这里下载
本文主要实例了Python3监控windows,linux系统的CPU、硬盘、内存使用率和各个端口的开启情况详细代码实例,更多关于Python3监控实例与技巧请查看下面的相关链接
您可能感兴趣的文章:python爬虫爬取监控教务系统的思路详解基于python的Linux系统指定进程性能监控思路详解python实现内存监控系统Python系统监控模块psutil功能与经典用法分析Pythonpyinotify日志监控系统处理日志的方法python使用wmi模块获取windows下的系统信息监控系统Python写的一个简单监控系统linux系统使用python监控apache服务器进程脚本分享python监控nginx端口和进程状态Python实现数通设备端口使用情况监控实例python循环监控远程端口的方法python实现数通设备端口监控示例
python 监控linux硬盘 Python3监控windows linux系统的CPU 硬盘 内存使用率和各个端口的开启情况详细代码实例...