import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import pymysql
import psutil
import os
import time def mail(name,description,disk_send_info,cpu_send_info,mem_send_info):
sender = 'mail_address'
password = 'mail_password'
reciver = 'xxx.xx@xx.com,xxx@xx.com' #可设置多人,用逗号分隔
subject = 'xxx(监控项目名称):%s警告'%name+ time.strftime('%Y-%m-%d %H:%M:%S',time.localtime()) msg = MIMEMultipart('mixed') #初始化 注意:标题和正文不能分别初始化
msg['From'] = sender
msg['To'] = reciver
msg['Subject'] = subject
msg.attach(MIMEText(str(description),'plain','utf-8'))
msg.attach(MIMEText(str(disk_send_info),'plain','utf-8'))#添加正式,MIMEText切记不能忘记
msg.attach(MIMEText(str(cpu_send_info),'plain','utf-8'))
msg.attach(MIMEText(str(mem_send_info),'plain','utf-8')) smtp = smtplib.SMTP()
smtp.connect('smtp.163.com')
smtp.set_debuglevel(1)
smtp.login(sender,password)
smtp.sendmail(sender,reciver.split(','),msg.as_string())
print('%s 发送成功'%subject)
smtp.quit() #获得硬盘的信息
def disk_info(disk_find):
# disk = psutil.disk_partitions()
# for i in disk:
# disk_partition = i.device #所有硬盘盘符
# disk_use = psutil.disk_usage(disk_partition)
# disk_utilization = disk_use.percent
disk_use = psutil.disk_usage(disk_find)
disk_utilization = str(disk_use.percent)
disk_total = '%sG' %(round(disk_use.total/1024/1024/1024,2))
disk_used = '%sG' %(round(disk_use.used/1024/1024/1024,2))
disk_free = '%sG' %(round(disk_use.free/1024/1024/1024,2))
disk_msg = {'总量':disk_total,
'已使用':disk_used,
'空闲':disk_free,
'使用率':disk_utilization + '%'
}
return disk_msg def cpu_info():
cpu_idle = str(os.popen("top -n 1 | sed -n '3p' | awk '{print $8}'").read()).strip()
cpu_used = str(100-float(cpu_idle)) + '%'
cpu_msg = {'已使用':cpu_used,
'剩余':str(cpu_idle) + '%'}
return cpu_idle,cpu_msg def memory_info():
mem_free = str(os.popen("top -n 1 | sed -n '4p' | awk '{print $8}'").read()).strip()
mem_buff = str(os.popen("top -n 1 | sed -n '4p' | awk '{print $10}'").read()).strip()
mem_cached = str(os.popen("top -n 1 | sed -n '5p' | awk '{print $9}'").read()).strip()
mem_total = round(int(str(os.popen("top -n 1 | sed -n '4p' | awk '{print $4}'").read()).strip())/1024/1024,0)
mem_free_total = round((int(mem_free) + int(mem_buff) + int(mem_cached))/1024/1024,0)
mem_free_ratio = str(round(int(mem_free_total)*100/int(mem_total),2))
mem_msg = {
'总量':str(mem_total) + 'G',
'已使用':str(mem_total - mem_free_total) + 'G',
'剩余':mem_free_ratio + '%'
}
return mem_free_ratio,mem_msg def mysql_monitor(user,password,host,port):
try:
conn = pymysql.connect(host = host,port = port,user = user,passwd = password)
except:
return '主人,数据库无法正常连接了,请尽快处理!!!'
conn.close() def docker_monitor(): #disk_find = str(os.popen("df -hT | grep /data |awk 'NR==1{print}' | awk '{print $1}'").read()).strip()#读取第一行
disk_find = '/data'
while True:
disk_info_msg = disk_info(disk_find)
cpu_tup = cpu_info()
cpu_idle = cpu_tup[0]
cpu_msg = cpu_tup[1]
mem_tup = memory_info()
mem_free_ratio = mem_tup[0]
mem_msg = mem_tup[1]
mysql_info = mysql_monitor('xxx(user)','xxxx(password)','192.168.1.230',3306)
localtime = time.localtime()
if str(localtime[3]) == '11':
name = '正常'
description = '主人,我乖乖的努力工作了一天哟,犒赏犒赏!!!'
disk_send_info = '硬盘:' + str(disk_info_msg)
cpu_send_info = 'CPU:' + str(cpu_msg)
mem_send_info = '内存:' + str(mem_msg)
print(disk_send_info)
mail(name,description,disk_send_info,cpu_send_info,mem_send_info)
if mysql_info:
name = '数据库'
description = mysql_info
disk_send_info = '硬盘:' + str(disk_info_msg)
cpu_send_info = 'CPU:' + str(cpu_msg)
mem_send_info = '内存:' + str(mem_msg)
mail(name,description,disk_send_info,cpu_send_info,mem_send_info)
if int(float(disk_info_msg['使用率'][0:-1])) >= 80:
os.popen('docker stop default-vidio')
name = '硬盘'
description = '主人,我吃胀了,请给我健胃消食片!!!!'
disk_send_info = '硬盘:' + str(disk_info_msg)
cpu_send_info = 'CPU:' + str(cpu_msg)
mem_send_info = '内存:' + str(mem_msg)
mail(name,description,disk_send_info,cpu_send_info,mem_send_info)
#小数后面是.0,先转浮点数在转整数
if int(float(cpu_idle)) <= 20 :
name = 'CPU'
description = '主人,我大脑不够用了,快救救我!!!!'
disk_send_info = '硬盘:' + str(disk_info_msg)
cpu_send_info = 'CPU:' + str(cpu_msg)
mem_send_info = '内存:' + str(mem_msg)
mail(name, description, disk_send_info, cpu_send_info, mem_send_info)
if int(float(mem_free_ratio)) <=20:
name = '内存'
description = '主人,我血液不畅通,快疏通疏通!!!!'
disk_send_info = '硬盘:' + str(disk_info_msg)
cpu_send_info = 'CPU:' + str(cpu_msg)
mem_send_info = '内存:' + str(mem_msg)
mail(name, description, disk_send_info, cpu_send_info, mem_send_info)
time.sleep(3600)

python3 简单服务器监控,自动发送邮件的更多相关文章

  1. java使用JMail通过QQ邮件服务器实现自动发送邮件

    前言:项目开发的过程中,我们项目需要一个自动发送邮件提醒的小功能,于是简单的研究了一下java的JMail来实现自动发送邮件的功能.已被后期需要参考. 一.准备 实现的原理很简单:发送人 , 中转的邮 ...

  2. Python3.x:定时自动发送邮件

    定时自动发送邮件 一.简述 python发邮件需要掌握两个模块的用法,smtplib和email,这俩模块是python自带的,只需import即可使用.smtplib模块主要负责发送邮件,email ...

  3. [rrdtool]监控和自动画图,简单的监控.md

    现在想要监控服务的流量和并发数,可是又没那么多时间来写系统,其他的运维系统又不熟悉,于是就用现有的rrdtool shell做了个简单的监控界面,临时用下,也算是个小实验把. rrdtool也是刚接触 ...

  4. python3+request接口自动化框架中自动发送邮件

    在上一篇中的自动化框架中没有放上自动发送测试结果到邮箱的功能,在这篇文章中在补一下,哈哈 1.上一篇的代码就不在一一介绍了,本篇只介绍发送邮件的功能代码 2.在public common 文件夹中创建 ...

  5. jmeter服务器监控插件指标简单说明

    以下是下载了服务器监控插件的各个组件的功能介绍,有助于以后jmeter的性能测试 1.jp@gc - Actiive Threads Over Time:不同时间的活动用户数量展示(图表) 当前的时间 ...

  6. 1. SQL Server服务器监控实现方法

    对于服务器的监控,和对数据库的监控,很少有合二为一的工具,如果有的话,一般是付费软件,或者自行开发的工具.所以如果不想购买软件,也不想花精力去开发的话,可以结合一些免费/开源的工具.自定义脚本,来完成 ...

  7. python☞自动发送邮件

    一.SMTP 协议 SMTP(Simple Mail Transfer Protocol)是简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式 二.smtplib ...

  8. SQL SERVER 2008自动发送邮件(完整版)

    这两天都在搞这个东西,从开始的一点不懂,到现在自己可以独立的完成这个功能!在这个过程中,CSDN的好多牛人都给了我很大的帮助,在此表示十二分的感谢!写这篇文章,一是为了巩固一下,二嘛我也很希望我写的这 ...

  9. centos7安装Logwatch配合msmtp邮件客户端发送服务器监控分析日志

    ########################### #DATE 2016-07-29                         # #Authur by Denilas Yeung     ...

随机推荐

  1. js:常用到的js操作记录

    1:对参数去除空格 str.replace(/^\s+|\s+$/g, '');

  2. NET Core 2.1 Preview 1

    NET Core 2.1 Preview 1 [翻译] .NET Core 2.1 Preview 1 发布 原文: Announcing .NET Core 2.1 Preview 1 今天,我们宣 ...

  3. Net Core -- 配置Kestrel端口

    Net Core -- 配置Kestrel端口 Kestrel介绍 在Asp.Net Core中,我们的web application 其实是运行在Kestrel服务上,它是一个基于libuv开源的跨 ...

  4. java exception "file not found or file not exist"

    出现这种异常一般有两种原因,第一种就是文件真的不存在:第二种是权限问题,权限问题又分为文件本身的权限和包含它的文件夹的权限 比如 ~/aaa/bbb/ccc/ddd/eee.txt  只要 aaa , ...

  5. 使用centos7的wall防火墙可能存在失效问题

    centos7有自己新的防火墙,但是仍然带有centos6.5的iptable防火墙,当新防火墙不稳定,失效时,可以采用老防火墙 以上都是在vm虚拟机上发现的问题 参考文章 https://www.c ...

  6. 使用 xib 设置 button 等款等高

    很多时候需要使用平分的控件来布局,当然xib中可以之间使用 UIToolBar 使用 UIBarButtonItem 添加弹簧即可完成平均分布 但是,直接使用 button 也可以实现平均布局

  7. 架构演进历程及为什么选择Spring Cloud

    单体式架构: 垂直拆分: 垂直拆分的特点: 分布式服务: 分布式服务的特点: SOA面向服务的架构: 服务治理: 微服务: 微服务结构: 服务调用方式: http客户端工具:

  8. IT部门域事件与业务分析

    IT event--->system--->IT dept |--------------->IT dept |--------------->system 域事件分类: 直接 ...

  9. java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/Config

    今天写SpringMvc时,遇到这样一个问题: java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/Config at org.sp ...

  10. netbackup如何手动获取主机ID证书。

    如何手动获取主机ID证书.   文章:100039650 最后发布:2017-09-21 评分:  20 11 产品:NetBackup 问题 从NetBackup V8.1开始,管理员需要在证书颁发 ...