python监控cpu 内存实现邮件微信报警
# 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 内存实现邮件微信报警的更多相关文章
- python监控CPU/内存/磁盘,超过指定百分比,发送邮件
#!/usr/bin/python #coding:utf-8 #导入psutil模块 import psutil import yagmail def mail(subject,contents): ...
- centos8平台使用pidstat监控cpu/内存/io
一,安装pidstat: 1,安装 [root@localhost yum.repos.d]# yum install sysstat 2,查看版本: [root@localhost ~]# pids ...
- python监控cpu 硬盘 内存
import psutil import time import yagmail def sendmail(subject,contents): yag = yagmail.SMTP(user='15 ...
- shell脚本监控cpu/内存使用率 转
该脚本检测cpu和内存的使用情况,只需要调整memorySetting.cpuSetting.userEmail要发邮件报警的email地址即可 如果没有配置发邮件参数的哥们,已配置了的,直接飞到代码 ...
- python监控linux内存并写入mongodb
(需要安装psutil 用来获取服务器资源,以及pymongo驱动)#pip install psutil #pip install pymongo #vim memory_monitory.py 文 ...
- linux 监控CPU 内存情况
htop
- 性能测试培训: 监控CPU之python
性能测试培训: 监控CPU之python 作为一名测试开发工程师,开发脚本是为了测试服务的,我们在手里没有性能监控工具的情况下,我们会自己来进行开发脚本完成监控任务.下面是python监控cpu '' ...
- 设置zabbix (3.4.2)添加监控项,触发器,让CPU使用超过85%就报警:
zabbix (3.4.2)添加监控项,触发器,让CPU使用超过85%就报警: zabbix自带模板有一个 Template OS Linux模板.这个模板有监控CPU的监控项,如果没有添加一个监控项 ...
- 总zabbix配置-搭建-邮件报警-微信报警-监控mysql
Centos7安装Zabbix4.0步骤 官方搭建zabbix4.0的环境要求: 1. 环境搭建LAMP 前提Centos系统安装完成: 确认一下: 1 2 cat /etc/redhat-rele ...
随机推荐
- Python支付宝单笔转账接口
开发信息 接口加签方式为证书模式 证书模式好处是可以使用支付宝的转账到支付宝账户,也就是提现功能,公钥模式不能实现转账到支付宝账户. 此DEMO利用单笔转账到支付宝账户接口[提现功能]用户可以通过此D ...
- 学习Spring5必知必会(1)~未使用spring前的麻烦
一.未使用spring前的麻烦 开闭原则:扩展是开放的,但是对于修改是"封闭的". 1.代码耦合度比较高[不符合开闭原则]: public class EmployeeServic ...
- HashMap(1.8)源码学习
一.HashMap介绍 1.哈希表(hash table) 在哈希表中进行添加,删除,查找等操作,时间复杂度为O(1) 存储位置 = f(关键字) 其中,这个函数f一般称为哈希函数,这个函数的设计好坏 ...
- uniapp 微信发送订阅消息
这篇主要针对小程序进行演示,既然是发送消息,那么就有三个问题.发送什么内容,给谁发送,怎么发送!往下一条一条解决. 发送什么消息内容 - 通过微信公众号平台 选择对应的消息模板 选择以后在我的模板里面 ...
- INTERSPEECH 2014 | 1-Bit Stochastic Gradient Descent and its Application to Data-Parallel Distributed Training of Speech DNNs
这篇文章之前也读过,不过读的不太仔细,论文中的一些细节并没有注意到.最近为了写开题报告,又把这篇论文细读了一遍.据笔者了解,这篇论文应该是梯度量化领域的开山之作,首次使用了梯度量化技术来降低分布式神经 ...
- 五、模板方法设计模式及在Spring中的应用
模板方法模式是一种行为型设计模式,具体定义网络上很多资源搜到本文不赘述. 如果字面理解比较抽象的话,那以生活中简单的行为为例:天热了,到了晚上妈妈都要将今天没有吃完的饭菜放入冰箱.将饭菜放入冰箱就是一 ...
- uniapp上传图片转base64码案例
uni.chooseImage({ count: 9, success: res => { this.imageList = this.imageList.concat(res.tempFile ...
- java: 程序包com.sun.media.jai.codec不存在
Q:IDEA编译时提示"java: 程序包com.sun.media.jai.codec不存在" A:添加下面的repository到pom.xml中 <repository ...
- service与systemctl命令比较
本文将比较 linux 的 service 和 systemctl 命令,先分别简单介绍这两个命令的基础用法,然后进行比较. 从 CentOS 7.x 开始,CentOS 开始使用 systemd 服 ...
- MyBatis分页插件PageHelper使用方法
1.导入相关依赖坐标 <!-- MyBatis分页插件 --> <dependency> <groupId>com.github.pagehelper</gr ...