由于项目的需要,需要做一个简单监控服务器的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 + "?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监控实例与技巧请查看下面的相关链接
df 命令,用于显示 Linux 系统中各文件系统的硬盘使用情况,包括文件系统所在硬盘分区的总容量、已使用的容量、剩余容量等。 前面讲过,与整个文件系统有关的数据,都保存在 Super block(超级块)中,而 df 命令主要读取的数据几乎都针对的是整个文件系统,所以 df 命令主要是从各文件系统的 Super block 中读取数据。 df 命令的基本格式为: [root@localhost
问题内容: 我想用Java监视以下系统信息: 当前的CPU使用率*(百分比) 可用内存 (可用/总计) 可用磁盘空间(可用/总) 请注意,我的意思是整个系统可用的整体内存,而不仅仅是JVM。 我正在寻找一种不依赖于我自己的调用外部程序或使用JNI的代码的跨平台解决方案(Linux,Mac和Windows)。尽管这些是可行的选择,但如果有人已经有了更好的解决方案,我宁愿自己不要维护特定于操作系统的代
本文向大家介绍详解JVM 运行时内存使用情况监控,包括了详解JVM 运行时内存使用情况监控的使用技巧和注意事项,需要的朋友参考一下 java 语言, 开发者不能直接控制程序运行内存, 对象的创建都是由类加载器一步步解析, 执行与生成与内存区域中的; 并且jvm有自己的垃圾回收器对内存区域管理, 回收; 但是我们已经可以通过一些工具来在程序运行时查看对应的jvm内存使用情况, 帮助更好的分析与优化我
本文向大家介绍python在linux系统下获取系统内存使用情况的方法,包括了python在linux系统下获取系统内存使用情况的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了python在linux系统下获取系统内存使用情况的方法。分享给大家供大家参考。具体如下: 将上面的代码保存为:memorymonitor.py 调用方法如下: 希望本文所述对大家的Python程序设计有所帮助
问题内容: 我想获取Linux上单个进程的CPU和内存使用情况-我知道PID。希望我可以每秒获取一次,并使用“ watch”命令将其写入CSV。我可以使用什么命令从Linux命令行获取此信息? 问题答案: (您可以省略“ cmd”,但这可能有助于调试)。 请注意,这给出了该进程在运行期间的平均CPU使用率。
本文向大家介绍python实现内存监控系统,包括了python实现内存监控系统的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了python实现内存监控系统的具体代码,供大家参考,具体内容如下 思路:通过系统命令或操作系统文件获取到内存信息(linux 内存信息存在/proc/meminfo文件中,mac os 通过命令vm_stat命令可以查看) 并将获取到信息保存到数据库中,通过w
我正在尝试衡量在Windows7HotSpotJVM中使用大内存页面的性能提升。为了做到这一点,我需要监视JVM内存使用情况,以确保实际使用了大型页面。不幸的是,我无法找到实现这一目标的途径。下面是我所做的设置和测试的描述: 环境设置 我正在使用64位Windows 7终极版进行测试。“将页面锁定在内存中”Windows安全策略已启用,如Java支持大内存页中所述。我还通过运行java版本命令验证
本文向大家介绍Springboot启用多个监听端口代码实例,包括了Springboot启用多个监听端口代码实例的使用技巧和注意事项,需要的朋友参考一下 前段时间服务有这么个需求,web端的接口需要有web安全相关的整改,但是对内的接口并不需要。所以服务需要多个端口启动,在此记录下 代码如下 application.yml server: port: ${appPort:8800} addition