由于项目的需要,需要做一个简单监控服务器的CPU利用率、CPU负载、硬盘使用率、内存利用率和服务器的各个端口的开启情况的程序,并把结果通知到监控平台,如果出现异常,监控平台打电话或者发短信通知给具体的运维人员
python版本要求:python3.0 以上
安装 python 的 psutil 包 和 requests 包
pip install psutil
pip install requests
Linux系统下运行效果
Windows系统下运行效果
代码实例核心程序
# 获取端口信息 @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 + "" + 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监控实例与技巧请查看下面的相关链接
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]