Shell+Python 简易监控CPU并报警

Linux IT敢客 8个月前 (04-24) 9083次浏览 已收录 0个评论 扫描二维码

        我觉得只是为了小小折腾一下,因为我之前写过一个定时拉 mysql 数据报表并发送邮件给领导的 shell,拿来随便改改就好。
        现在这个简单的小需求就是,监控服务器的 CPU 使用率,如果超过 95%就发邮件报警给管理员。
这里,我换了一个方式,我用了一下 python 来实现。这里用到一个 psutil 的插件,可以 pip 安装一下。直接上 python 脚本内容了。

#!/env/.virtualenvs/scripts/bin/python
# -*- coding: utf-8 -*-
#--------------------------------------------------
#Author:amberx_xu
#Email:xudingjun3131@163.com
#FileName:check_cpu.py
#Function: 
#Version:1.0 
#Created:2018-04-24
#--------------------------------------------------
import sys
import smtplib 
import psutil
from email import encoders
from email.mime.base import MIMEBase
from email.mime.text import MIMEText
from email.utils import COMMASPACE
from email.mime.multipart import MIMEMultipart

mail_host = "smtp.exmail.qq.com"  # 邮件传送协议服务器
mail_user = "xxxx@itgank.com" # 邮件发送方的邮箱账号
mail_pass = "xxxxxx" # 邮件发送方的邮箱密码

def send_mail(fro,to,subject,text,txttype='html',files=[]): 
    msg = MIMEMultipart() 
    msg['From'] = fro 
    msg['Subject'] = subject 
    msg['To'] = COMMASPACE.join(to) 
    if txttype=="html":
            msg.attach(MIMEText(text,'html')) 
    else:
            msg.attach(MIMEText(text)) 
    for file in files: 
        part = MIMEBase('application', 'octet-stream')
        part.set_payload(open(file, 'r').read()) 
        encoders.encode_base64(part) 
        part.add_header('Content-Disposition', 'attachment; filename="%s"' % os.path.basename(file)) 
        msg.attach(part) 

    s = smtplib.SMTP_SSL()
    s.connect(mail_host)
    s.ehlo()  
    s.login(mail_user, mail_pass)
    s.sendmail(fro,to,msg.as_string()) 
    s.quit()


if __name__=='__main__':
        fro = 'xxxx@itgank.com'
        to = ['xudingjun3131@163.com',]
        subject = "IT 敢客"
        num = float(psutil.cpu_percent(2))
        if num >= 95:
            text = "报告老板,您的服务器快要爆炸了,CPU 使用率超过"+str(num)+"%啦,还不快去看看!!!!"
            txttype = 'html'
            files = []
            send_mail(fro,to,subject,text,txttype,files)

最后的实验效果邮件如下图
Shell+Python 简易监控 CPU 并报警
接下来,我们用 shell+python 的方式来实现这个需求,谢了两个 py 和一个 sh,cpu.py,err_mail.py 和 check_cpu.sh,
cpu.py 的内容如下

#!/env/.virtualenvs/scripts/bin/python
import psutil
num = float(psutil.cpu_percent(2))
print(int(num))

err_mail.py 的内容如下

#!/env/.virtualenvs/scripts/bin/python
# -*- coding: utf-8 -*-
#--------------------------------------------------
#Author:amber_xu
#Email:xudingjun3131@163.com
#FileName:err_mail.py
#Function: 
#Version:1.0 
#Created:2018-04-24
#--------------------------------------------------
import sys
import smtplib 
import psutil
from email import encoders
from email.mime.base import MIMEBase
from email.mime.text import MIMEText
from email.utils import COMMASPACE
from email.mime.multipart import MIMEMultipart

mail_host = "smtp.exmail.qq.com"  # 邮件传送协议服务器
mail_user = "xxxx@itgank.com" # 邮件发送方的邮箱账号
mail_pass = "xxxxxxxx" # 邮件发送方的邮箱密码

def send_mail(fro,to,subject,text,txttype='html',files=[]): 
    msg = MIMEMultipart() 
    msg['From'] = fro 
    msg['Subject'] = subject 
    msg['To'] = COMMASPACE.join(to) 
    if txttype=="html":
            msg.attach(MIMEText(text,'html')) 
    else:
            msg.attach(MIMEText(text)) 
    for file in files: 
        part = MIMEBase('application', 'octet-stream')
        part.set_payload(open(file, 'r').read()) 
        encoders.encode_base64(part) 
        part.add_header('Content-Disposition', 'attachment; filename="%s"' % os.path.basename(file)) 
        msg.attach(part) 

    s = smtplib.SMTP_SSL()
    s.connect(mail_host)
    s.ehlo()  
    s.login(mail_user, mail_pass)
    s.sendmail(fro,to,msg.as_string()) 
    s.quit()


if __name__=='__main__':
        fro = 'xxxx@itgank.com'
        to = ['xudingjun3131@163.com',]
        subject = "IT 敢客"
        text = sys.argv[1]
        txttype = 'html'
        files = []
        send_mail(fro,to,subject,text,txttype,files)

check_cpu.sh 的内容如下

#!/bin/bash
declare -i k
cd /root/mail
k=`python cpu.py`
if [ ${k} -gt 95 ];
then
        python /root/mail/err_mail.py "报告老板,您的服务器快要爆炸了,CPU 使用率超过${k}%啦,还不快去看看!!!!"
fi

邮件效果和上面是一样的。
然后写个定时任务,天天跑着监控就好啦!
另外关于 shell 怎么写这个脚本,提供一个参考点
过去 CPU 使用率值的可以用下面的语句来获得,然后参考我之前的脚本解可以了,

mysql 定时拉报表给领导

CPU=`top -b -n 1|grep Cpu|awk '{print $2}'|cut -f 1 -d "."`

欢迎提意见交流!


IT 敢客 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Shell+Python 简易监控 CPU 并报警
喜欢 (159)
[313176056@qq.com]
分享 (0)
IT敢客
关于作者:
“我所做的一切都是为了方便我的生活~~~“
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址