# qianxiao996精心制作
#博客地址:https://blog.csdn.net/qq_36374896
import psutil, time,smtplib,socket
import datetime
from wechatpy import WeChatClient
from email.mime.text import MIMEText
from email.utils import formataddr
from prettytable import PrettyTable
class Monitor(): cpu_data = []
@classmethod # 类方法(不需要实例化类就可以被类本身调用)
#获取内存使用率
def mem(cls, max=90):
val = psutil.virtual_memory().percent #获取内存的使用率的百分比
#print(val)
if val > max:
#print(val)
send_data ='内存使用率为'+str(round(val, 1))+'%,超过了'+str(max)+"%,请关注!"
#print(send_data)
cls.send_msg(str(send_data))
time.sleep(10) @classmethod
#获取cpu使用率
def cpu(cls, max=90):
val = psutil.cpu_percent(1) #获取cpu使用率
#print(val)
cls.cpu_data.append(val)
#print(cls.cpu_data)
if len(cls.cpu_data) >= 3:
avg = sum(cls.cpu_data) / len(cls.cpu_data) #求出CPU的三次的平均值
if avg > max:
#print(avg)
send_data = 'CPU使用率为' + str(round(val, 1)) + '%,超过了' + str(max) + "%,请关注!"
#print(send_data)
cls.send_msg(send_data)
time.sleep(10)
cls.cpu_data.pop(0) #移除第0个元素的值 @classmethod # 类方法(不需要实例化类就可以被类本身调用)
#调用报警函数
def send_msg(cls, content):
system_data = cls.get_system()
data = '错误信息:\n'+content+'\n\n系统信息:\n'+system_data
print(data)
#cls.mail(data)
#cls.wechat(content) #得到系统信息
@classmethod
def get_system(cls):
date = ""
# 用户信息
now_time =time.strftime('%Y-%m-%d-%H:%M:%S', time.localtime(time.time()))
start_time =datetime.datetime.fromtimestamp(psutil.boot_time()).strftime("%Y-%m-%d %H: %M: %S") # CPU信息
cpu_num = psutil.cpu_count(logical=False)
cpu = (str(psutil.cpu_percent(1))) + '%' # 内存信息
total =str(round(psutil.virtual_memory().total / (1024.0 * 1024.0 * 1024.0), 2)) + 'G'
total_used = str(round(psutil.virtual_memory().used / (1024.0 * 1024.0 * 1024.0), 2)) + 'G'
total_free =str(round(psutil.virtual_memory().free / (1024.0 * 1024.0 * 1024.0), 2)) + 'G'
memory = str(psutil.virtual_memory().percent) + '%' # 网卡信息
net = psutil.net_io_counters()
bytes_sent = '{0:.2f} Mb'.format(net.bytes_recv / 1024 / 1024)
bytes_rcvd = '{0:.2f} Mb'.format(net.bytes_sent / 1024 / 1024) date += "当前用户: " + str(psutil.users()[0][0]) + '\n'
date += "IP 地址: " + str(psutil.users()[0][2]) + '\n\n'
date +="系统当前时间: "+now_time+'\n'
date +="系统开机时间: "+start_time+'\n'
date += '\n'
date +="CPU个数: "+str(cpu_num)+'\n'
date +="CPU使用率: "+ cpu+'\n\n'
date+="内存: "+total+'\n'
date+="内存已使用: "+total_used+'\n'
date+="剩余内存: "+ total_free+'\n'
date+="内存使用率: "+memory+'\n\n'
date+="网卡发送流量: "+bytes_sent+'\n'
date+="网卡接收流量: "+ bytes_rcvd+'\n\n'
# 磁盘信息
io = psutil.disk_partitions()
for i in io:
pan = i[0][0][0] + '盘使用情况\n'
o = psutil.disk_usage(i.device)
disk=str(int(o.total / (1024.0 * 1024.0 * 1024.0))) + "G"
disk_use=str(int(o.used / (1024.0 * 1024.0 * 1024.0))) + "G"
disk_free=str(int(o.free / (1024.0 * 1024.0 * 1024.0))) + "G"
date+=pan
date+='总容量: '+disk+'\n'
date+='已用容量: '+disk_use+'\n'
date+='可用容量: '+disk_free+'\n\n'
return date @classmethod
#邮件报警
def mail(cls, content):
#print(content)
nickname = '监控程序'
# 发送者的信息
sender = 'qianxiao996@126.com'
password = 'qnxxxxxgjj'
# 接收方的邮箱
receiver = 'qianxiao996@126.com'
msg = MIMEText(content,_charset='gb2312')
msg['From'] = formataddr([nickname, sender])
msg['Subject'] = '自动报警'
server = smtplib.SMTP_SSL('smtp.qq.com', 465)
try:
server.login(sender, password)
server.sendmail(sender, [receiver], msg.as_string())
except Exception as ex:
print(ex)
finally:
server.quit()
@classmethod #微信报警
def wechat(cls, content):
client = WeChatClient('xxxx', 'xxxx')
template_id = 'xxxxx'
openid = 'xxxx'
data = {
'msg': {"value": content, "color": "#173177"},
'time': {"value": datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'), "color": "#173177"},
}
try:
client.message.send_template(openid, template_id, data)
except Exception as ex:
print(ex) while True:
Monitor.mem(20)
Monitor.cpu(3)
time.sleep(1)

python监控cpu 内存实现邮件微信报警的更多相关文章

  1. python监控CPU/内存/磁盘,超过指定百分比,发送邮件

    #!/usr/bin/python #coding:utf-8 #导入psutil模块 import psutil import yagmail def mail(subject,contents): ...

  2. centos8平台使用pidstat监控cpu/内存/io

    一,安装pidstat: 1,安装 [root@localhost yum.repos.d]# yum install sysstat 2,查看版本: [root@localhost ~]# pids ...

  3. python监控cpu 硬盘 内存

    import psutil import time import yagmail def sendmail(subject,contents): yag = yagmail.SMTP(user='15 ...

  4. shell脚本监控cpu/内存使用率 转

    该脚本检测cpu和内存的使用情况,只需要调整memorySetting.cpuSetting.userEmail要发邮件报警的email地址即可 如果没有配置发邮件参数的哥们,已配置了的,直接飞到代码 ...

  5. python监控linux内存并写入mongodb

    (需要安装psutil 用来获取服务器资源,以及pymongo驱动)#pip install psutil #pip install pymongo #vim memory_monitory.py 文 ...

  6. linux 监控CPU 内存情况

    htop

  7. 性能测试培训: 监控CPU之python

    性能测试培训: 监控CPU之python 作为一名测试开发工程师,开发脚本是为了测试服务的,我们在手里没有性能监控工具的情况下,我们会自己来进行开发脚本完成监控任务.下面是python监控cpu '' ...

  8. 设置zabbix (3.4.2)添加监控项,触发器,让CPU使用超过85%就报警:

    zabbix (3.4.2)添加监控项,触发器,让CPU使用超过85%就报警: zabbix自带模板有一个 Template OS Linux模板.这个模板有监控CPU的监控项,如果没有添加一个监控项 ...

  9. 总zabbix配置-搭建-邮件报警-微信报警-监控mysql

    Centos7安装Zabbix4.0步骤 官方搭建zabbix4.0的环境要求: 1. 环境搭建LAMP 前提Centos系统安装完成:  确认一下: 1 2 cat /etc/redhat-rele ...

随机推荐

  1. 《PHP程序员面试笔试宝典》——如何应对自己不会回答的问题?

    如何巧妙地回答面试官的问题? 本文摘自<PHP程序员面试笔试宝典> 在面试的过程中,对面试官提出的问题求职者并不是都能回答出来,计算机技术博大精深,很少有人能对计算机技术的各个分支学科了如 ...

  2. Solution Set - Border Theory

      我发现写 Solution Set 就不用写每道题的题意了,岂不美哉?   首先是一些奇妙结论.   定理 1(弱周期定理) 对于字符串 \(S\),若 \(S[:p]\) 和 \(S[:q]\) ...

  3. mysqlCRUD

    一.介绍 CRUD即增加(Create).查询(Retrieve).更新(Update).删除(Delete)四个单词的首字母缩写. In computing, CRUD is an acronym ...

  4. Spring Data JPA应用之常规CRUD操作初体验

    基于对于一个陌生的技术框架,先使用后研究其实现的原则(大部分本人如此,就如小朋友学习骑自行车不会先研究自行车是怎么动起来的而是先骑会了),对于Spring JPA先通过案例实践其怎么用吧. 用之前得明 ...

  5. 《手把手教你》系列技巧篇(六十八)-java+ selenium自动化测试 - 读写excel文件 - 下篇(详细教程)

    1.简介 今天继续操作Excle,小伙伴或者童鞋们是不是觉得宏哥会介绍第三种工具操作Excle,今天不介绍了,有两种就够用了,其实一种就够用了,今天主要是来介绍如何使用不同的数据类型读取Excel文件 ...

  6. .NET 6学习笔记(1)——通过FileStream实现不同进程对单一文件的同时读写

    会写这篇纯属机缘巧合,虽然一直以来认为对单一文件的读.写操作是不冲突,可并行的,但实际并未实践过.正好有个UWP的程序要并行读取由Desktop Extension创建的文本,需要有个原型程序来验证, ...

  7. Hbuilderx换行问题(属性合并一行展示)

    1. 标签折行,非吾所愿(格式化代码快捷键:Ctrl + K)  2. 打开工具-设置 3. 点击左侧插件配置,点击右边下侧jsbeautify 4. 将原本的折行长度由120改为1200(长度可根据 ...

  8. 今儿直白的用盖房子为例,给你讲讲Java建造者模式

    摘要:建造者模式(Builder Pattern)又叫生成器模式,是一种对象构建模式.它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象. 本 ...

  9. HDFS的上传下载流程

    hdfs上传流程 首先客户端向nn请求上传文件.nn经过检查回应客户端是否可以上传.客户端得到同意后向nn请求上传第一块文件的dn.nn返回给客户端dn的地址.客户端与其中一个dn1建立连接然后dn1 ...

  10. Oracle RAC架构图和常用命令

    转至:https://www.cnblogs.com/yaoyangding/p/15596308.html Oracle RAC(实时应用集群)是Oracle数据库完全高可用体系解决方案中的一个关键 ...